Java 在文本框中设置日期?
我为我的项目创建日期小部件 n对对象的setProperty和getProperty使用相同的小部件Java 在文本框中设置日期?,java,gwt,gwt2,gwt-widgets,Java,Gwt,Gwt2,Gwt Widgets,我为我的项目创建日期小部件 n对对象的setProperty和getProperty使用相同的小部件 public TextBox getTimeTxtbx() { // TODO Auto-generated method stub timebx =new TextBox(); timebx.setReadOnly(true); final PopupPanel popupPanel=new PopupPanel(true);
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);
}
在flexTable中,上述代码位于一个迭代器中,并被称为两次。
如图所示:testDate接收日期为
当我点击testDate时,Received on的值被更改
编辑
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);
}
}
}
这是非常好的工作。
我得到了正确的值。在我看来,testingDate和receivedOn的textBoxDisplay
是同一个小部件实例。这意味着,如果添加了receivedOn,它将覆盖testingDate,因此,当您单击testingDate图标时,会出现弹出窗口。因此,testingDate和receivedOn都需要一个textBoxDisplay
,比如:textBoxDisplayTestingDate
和textBoxDisplayReceivedOn
这是实现中的一个参考问题
在第二次迭代gettimextbx
(当您在textbox上创建Received时)时,您已经将textBoxDisplay
实例中的局部变量timebx
设置为一个新的引用,即在textbox上接收的引用。您的datePicker
的onValueChange
实现在timebx
上设置文本,因此在您的第二次迭代中设置的是Received on textbox,而不是testingDate
文本框
TextBoxDisplay textBoxDisplay = new TextBoxDisplay();
flexTable.setWidget(i, j,textBoxDisplay.getTimeTxtbx());
textBoxDisplay.setTimebx(customProperty.getValues().toString());
尝试在迭代过程中使用新的TextBoxDisplay
实例
TextBoxDisplay textBoxDisplay = new TextBoxDisplay();
flexTable.setWidget(i, j,textBoxDisplay.getTimeTxtbx());
textBoxDisplay.setTimebx(customProperty.getValues().toString());
@Keppil当我点击testDate的文本框时,弹出窗口出现在ReceivedOn的文本框上,并且ReceivedOn文本框的值发生了变化。我还怀疑是否实例化了对象。我正在使用布尔列表进行类似的编码。。AnimationEnabled和testingBoolean。。它运转良好。。请检查编辑区域。使用布尔列表,您仅初始化列表框,而不添加处理程序。因此,在初始化阶段之外不会访问selectBoolean
。但是,selectBoolean
将是最后一个初始化的列表框。因此,如果您添加了一个更改处理程序,这意味着如果您的任何列表框更改了值,并且您在处理程序中读取了selectBoolean
的值,那么它将读取最后初始化的列表框的值。
TextBoxDisplay textBoxDisplay = new TextBoxDisplay();
flexTable.setWidget(i, j,textBoxDisplay.getTimeTxtbx());
textBoxDisplay.setTimebx(customProperty.getValues().toString());