我正在尝试让GWT CellTable捕获类型为DoubleClickEvent的事件,但是当CellTable在UI中单击某行时正确接收到类型为ClickEvent的事件时,当该行却看不到任何DoubleClickEvent双击该行。

因此,如果单击UI中的一行,则正确触发为ClickEvent声明的处理程序,但是如果我双击为DoubleClickEvent声明的处理程序,则不会触发。

我是在做错什么还是CellTable本身根本无法处理DoubleClickEvent
在后一种情况下,捕获表中双击的好方法是什么?

下面是我的CellTable声明的代码:

CellTable<ServiceTypeUI> contentTable = new CellTable<ServiceTypeUI>(10, style);
contentTable.setSelectionModel(new SingleSelectionModel<ServiceTypeUI>());
contentTable.addHandler(new DoubleClickHandler() { // HANDLER NOT CORRECTLY TRIGGERED
   @Override
   @SuppressWarnings("unchecked")
   public void onDoubleClick(DoubleClickEvent event) {
       presenter.doubleClickHandler(event);
   }

}, DoubleClickEvent.getType());
contentTable.addHandler(new ClickHandler() { // HANDLER CORRECTLY TRIGGERED
   @Override
   @SuppressWarnings("unchecked")
   public void onClick(ClickEvent event) {
       presenter.clickHandler(event);
   }

}, ClickEvent.getType());


我还尝试了删除ClickEvent处理程序声明和SelectionModel声明,以避免其中任何一个捕获DoubleClickEvent事件并将其视为ClickEvent,但是即使在这种情况下,也不会触发DoubleClickHandler。

CellTable<ServiceTypeUI> contentTable = new CellTable<ServiceTypeUI>(10, style);
contentTable.addHandler(new DoubleClickHandler() { // HANDLER NOT CORRECTLY TRIGGERED
   @Override
   @SuppressWarnings("unchecked")
   public void onDoubleClick(DoubleClickEvent event) {
       presenter.doubleClickHandler(event);
   }

}, DoubleClickEvent.getType());

最佳答案

       SingleSelectionModel<T> selectionModel
     = new SingleSelectionModel<T>();

   cellTable.setSelectionModel(selectionModel);
   cellTable.addDomHandler(new DoubleClickHandler() {

        @Override
        public void onDoubleClick(final DoubleClickEvent event) {
            T selected = selectionModel
                    .getSelectedObject();
            if (selected != null) {
                //DO YOUR STUFF

                                  }

        }
    },
    DoubleClickEvent.getType());


您必须将T替换为“ ServiceTypeUI”。选择的值将是从用户选择的对象。

10-07 14:13