GWT - ListBox,如何预览changeEvent

Lak*_*ler 5 javascript events gwt listbox dom-events

我正在实现一个ListBox,我希望能够在用户在ListBox中进行选择时提醒用户.有没有办法响应用户单击列表框中的项目,并在"changeEvent"发生之前响应选择,这样我可以防止changeEvent被触发.我试过用

Event.addNativePreviewHandler(new NativePreviewHandler() {
   @Override
   public void onPreviewNativeEvent(NativePreviewEvent event) {
      System.out.println("EVENT: " + event.getTypeInt());
   }
});
Run Code Online (Sandbox Code Playgroud)

但是这永远不会响应单击ListBox中的特定元素,它只会在您关注ListBox时响应最初单击ListBox.我希望能够做到这样的事情:

Event.addNativePreviewHandler(new NativePreviewHandler() {
   @Override
   public void onPreviewNativeEvent(NativePreviewEvent event) {
      if(event is changeEvent && event source is listBox) {
          if(do some check here)
             event.stopPropagation();
      }
   }
});
Run Code Online (Sandbox Code Playgroud)

任何建议将不胜感激,谢谢!

Lak*_*ler 3

谢谢各位的意见。我最终所做的是在列表框获得焦点时保存选择的状态。保存此索引并在发生更改事件时切换它,仅在允许的情况下将其更改为下一个选择。

@UiHandler("listBox")
public void onListBoxFocus(FocusEvent event) {
   this.saveListBoxSelection = listBox.getSelectedIndex();
}

@UiHandler("listBox")
public void onChange(ChangeEvent event) {
   int newSelection = listBoxCompliant.getSelectedIndex();
   listBox.setSelectedIndex(this.saveListBoxSelection);
   if(proceed with change)
      listBox.setSelectedIndex(newSelection);
   else 
      //cancel event
Run Code Online (Sandbox Code Playgroud)

这是使用 uibinder 完成的,但也可以通过简单地将此事件直接添加到 listBox 来完成。再次感谢您的评论!