我正在尝试让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”。选择的值将是从用户选择的对象。