2012-07-24 42 views
0

我爲我的項目創建日期的小部件。SetDate在文本框?

n對對象的setProperty和getProperty使用相同的小部件。

public TextBox getTimeTxtbx() { 
     // TODO Auto-generated method stub 

     timebx =new TextBox(); 

     timebx.setReadOnly(true); 
     final PopupPanel popupPanel=new PopupPanel(true); 
     final DatePicker datePicker=new DatePicker(); 

     datePicker.addValueChangeHandler(new ValueChangeHandler<Date>() { 

      public void onValueChange(ValueChangeEvent<Date> event) { 
       // TODO Auto-generated method stub 

       Date date=event.getValue(); 
       timebx.setText(DateTimeFormat.getFormat("EEE MMM dd HH:mm:ss z yyyy").format(date)); 
       popupPanel.hide(); 
      } 


     }); 
     popupPanel.setWidget(datePicker); 
     timebx.addClickHandler(new ClickHandler() { 

      public void onClick(ClickEvent event) { 
       // TODO Auto-generated method stub 
       String strDate = timebx.getText(); 
       System.out.println(" strDate " +strDate); 
       DateTimeFormat format = DateTimeFormat.getFormat("[EEE MMM dd HH:mm:ss z yyyy]"); 
       try { 
         Date selDate = (Date)format.parse(strDate); 
         datePicker.setValue(selDate, true); 
        } catch(Exception pe){ 
        // setting current date 
         System.out.println("error" +pe); 
        datePicker.setValue(new Date(), true); 
        } 
       int x=timebx.getAbsoluteLeft(); 
       int y=timebx.getAbsoluteTop(); 
       popupPanel.setPopupPosition(x, y+20); 
       popupPanel.show(); 
      } 
     }); 
     return timebx; 
    } 
    public void setTimebx(String string) { 
     // TODO Auto-generated method stub 
     timebx.setText(string); 
    } 

我在不同的GUI類

flexTable.setWidget(i, j,textBoxDisplay.getTimeTxtbx()); 
textBoxDisplay.setTimebx(customProperty.getValues().toString()); 

添加在flexTable此窗口小部件在flexTable,這上面的代碼是一個iterator內和稱爲兩次enter image description here

Like in Image:testDate an received on。

當我testDate點擊收到的值被改變


編輯

public ListBox getBooleanBox() { 
     // TODO Auto-generated method stub 
     selectBoolean = new ListBox(false); 
     //selectBoolean.setName(title); 
     selectBoolean.setStyleName("cmis-Customproperties-TextBox"); 
     selectBoolean.setSize("150px", "20px"); 
     selectBoolean.addItem("True","True"); 
     selectBoolean.addItem("False", "False"); 
     return selectBoolean; 
    } 
    public void setBooleanBox(String value){ 
     int itemCount = selectBoolean.getItemCount(); 
     for(int i = 0 ;i < itemCount;i++){ 
      if(selectBoolean.getItemText(i).equalsIgnoreCase(value)){ 
       selectBoolean.setSelectedIndex(i); 
      } 
     } 
    } 

將在flexTable

customPropertyTabel.setWidget(i, j,textBoxDisplay.getBooleanBox()); 
textBoxDisplay.setBooleanBox(removeSymbol(customProperty.getValues().toString())); 

,這是工作完全正常。 我得到了正確的值。

+0

你的問題是? – Keppil 2012-07-24 08:57:10

+0

@Keppil當我點擊測試日期的文本框彈出在文本框的ReceivedOn螞蟻receivedOn文本框的值的變化 – NewCodeLearner 2012-07-24 09:21:02

回答

1

這是實施中的參考問題。

在您的getTimeTxtbx秒迭代(當你創建收到文本框)您在textBoxDisplay實例設置的局部變量timebx到一個新的參考這是收到的文本框中。您的datePickeronValueChange實現將文本設置爲timebx,因此在第二次迭代中設置了「接收時間」文本框而不是testingDate文本框。

嘗試在迭代過程中使用TextBoxDisplay的新實例。

TextBoxDisplay textBoxDisplay = new TextBoxDisplay(); 
flexTable.setWidget(i, j,textBoxDisplay.getTimeTxtbx()); 
textBoxDisplay.setTimebx(customProperty.getValues().toString()); 
1

它在我看來textBoxDisplay是testingDate和receivedOn的相同小部件實例。這意味着如果receivedOn被添加,它會覆蓋testingDate,因此當您單擊testingDate的圖標時會出現彈出窗口。所以你需要textBoxDisplay爲testingDate和receivedOn,如:textBoxDisplayTestingDate

+0

我也懷疑實例化對象 – 2012-07-24 10:21:23

+0

我正在做類似的編碼與布爾列表.. AnimationEnabled和testingBoolean ..它工作正常.. Plz檢查編輯的區域。 – NewCodeLearner 2012-07-24 10:23:18

+0

使用布爾列表只能初始化列表框並且不要添加處理程序。所以'selectBoolean'不在初始化階段之外訪問。但'selectBoolean'將是最後一個初始化列表框。因此,如果添加更改處理程序,它將意味着如果您的任何一個listbox更改值,並且您在處理程序中讀取了'selectBoolean'的值,它將讀取最後初始化的列表框的值。 – 2012-07-24 11:12:30