在GXT中为Date触发Change事件

时间:2013-06-13 10:30:37

标签: java gwt gxt

我有这样的用户界面

enter image description here

使用 com.extjs.gxt.ui.client.widget.form.DateField 在Date的“改变”事件中,我有一个倾听者。 此处的问题是

  1. 当用户更改日期然后点击外部(表单空白区域的某处)时,“更改事件”会被解除
  2. 如果用户只是更改日期而不是在表单上单击外部,则更改事件已解雇。
  3. 我尝试了像Focus,Blur这样的其他事件。这些问题是有效的,因为日期是空的(而不是新的更改值)我想只在日期值改变时调用我的代码(用户不需要点击外面)
  4. 我的问题是,我希望仅在更改日期值时调用我的代码 没有用户需要点击外部...有没有方法?< / p>

3 个答案:

答案 0 :(得分:6)

我认为您在datefield上应用了监听器。您必须在datepicker上应用监听器,如下所示

DateField dateField = new DateField();
dateField.getDatePicker().addListener(Events.Select, new Listener<DatePickerEvent>() {

        @Override
        public void handleEvent(DatePickerEvent be) {
            System.out.println("Selected Date : "+be.getDate());
        }
});

我希望它会对你有所帮助。

答案 1 :(得分:0)

解决问题的一种简单方法是在此示例中为dateField,dateTextBox注册ClickEvent:

dateTextBox.addClickHandler(this);

然后触发更改事件

public void onClick(ClickEvent event) {
    if (event.getSource().equals(datePicker)) {
        dateTextBox.setText(DateTimeFormat.getFormat(getDateFormat()).format(datePicker.getValue()));
        DomEvent.fireNativeEvent(Document.get().createChangeEvent(), dateTextBox);
        datePicker.hide();
      }
    }

这种方法的唯一之处就是点击年份/口会隐藏日期选择器。

答案 2 :(得分:0)

只要用户没有离开窗口小部件,就不会触发模糊,焦点,更改事件。如果您对值更改感兴趣,请侦听keyDown(onKeyDown)事件和TriggerEvent(onTriggerEvent)。