我正在使用gwt网格,并试图获取其上有onDoubleClick事件的单元。所以,如果我在做onClickEvent,我会使用getCellForEvent(ClickEvent)并返回一个单元格。但是该方法不接受DoublClickEvent。我如何获得具有onDoubleClick ...的单元格?GWT Grid的DoubleClick事件处理程序
回答
延伸Grid
并使用受保护的getEventTargetCell
从NativeEvent
而不是GwtEvent
获得单元格。
我没有想到那个NativeEvent的东西。我希望它可以跨浏览器移植。我的DataGrid有一个ClickableTextCells的扩展。 DClickableTextCell(双击的“D”)对双击有反应,Microsoft在500毫秒内将其定义为双击。
public class DClickableTextCell extends ClickableTextCell {
@Override
public void onBrowserEvent(com.google.gwt.cell.client.Cell.Context context, Element parent,
String value, NativeEvent event, ValueUpdater<String> valueUpdater) {
String type = event.getType();
if ((valueUpdater != null) && type.equals("click")) {
if (DoubleClickTimer.getInstance().isTimerRunning()) {
event.preventDefault();
DoubleClickTimer.getInstance().stopTimer();
valueUpdater.update(value);
} else {
DoubleClickTimer.getInstance().startTimer();
}
}
}
}
如果DoubleClick计时器当前正在运行,则此次单击必须第二次单击双击。如果DoubleClick计时器目前尚未运行,那么这可能是DoubleClick的首次点击。启动计时器。这里是DoubleClickTimer的代码:
public class DoubleClickTimer {
private static DoubleClickTimer ref = null;
private DoubleClickTimer() {
}
public static DoubleClickTimer getInstance() {
if (ref == null) {
ref = new DoubleClickTimer();
}
return ref;
}
private boolean timerRunning = false;
private Timer timer = new Timer() {
@Override
public void run() {
timerRunning = false;
}
};
public void startTimer() {
if (!timerRunning) {
timer.schedule(500);
timerRunning = true;
}
}
public boolean isTimerRunning() {
return timerRunning;
}
public void stopTimer() {
timer.cancel();
timerRunning = false;
}
}
它的工作原理,但现在我要看看扩展DataGrid。问题是DataGrid引用了AbstractCellTable中的受保护方法,只要您将DataGrid子类放入不同的包中,该方法就无法访问。你也可以把AbstractCellTable放在上面,但是它会做出类似的引用,最终你会复制更多的东西。
对event.preventDefault的调用会抑制双击的正常行为,即突出显示正在单击的小部件。由于整个DataGrid是单个窗口小部件(单元格和列不是窗口小部件),因此DataGrid中的每一行文本都会被选中,除非您阻止该默认行为。
我不是专家,我想从人们那里得到关于我是否可以做得更好的建议。但它有效,所以我提供它作为可能的答案。
您需要扩展原始单元格。在构造变化:
super("click", "keyup", "keydown", "blur");
到super("dblclick", "keyup", "keydown", "blur");
,并在onBrowserEvent方法改变:
if ("click".equals(type) || enterPressed)
到if ("dblclick".equals(type) || enterPressed)
- 1. DoubleClick Command和DoubleClick事件处理程序的执行顺序
- 2. GWT事件处理程序阻止UI
- 3. GWT - 如何处理同一事件的多个处理程序
- 4. 使用Onclick事件处理程序触发Doubleclick Floodlight
- 5. ext gwt grid事件
- 6. GWT中的事件处理
- 7. GWT事件预览与事件处理程序
- 8. GWT:我做了事件和事件处理程序类吗?
- 9. GWT多个事件处理
- 10. GWT元素事件处理
- 11. GWT处理UIBinder事件
- 12. HTML事件处理程序与React事件处理程序
- 13. 的事件处理程序
- 14. 如何从DoubleClick事件处理程序中的DevExpress GridControl获取点?
- 15. 取消以下处理程序的GWT事件
- 16. GWT开放事件的Stackpanel处理程序
- 17. GWT反映动态的事件处理程序
- 18. 处理程序不处理事件
- 19. Reactive extensions处理事件处理程序
- 20. KEY_ENTER处理程序RootPanel GWT
- 21. GWT Mvp和处理程序
- 22. C#事件处理程序
- 23. MFC事件处理程序
- 24. MsftDiscFormat2Data事件处理程序
- 25. 事件处理程序
- 26. wpf事件处理程序
- 27. JavaScript事件处理程序
- 28. 事件处理程序TabbedPanel
- 29. DRYing事件处理程序
- 30. 事件处理程序
你说的一个NativeEvent是什么意思?对不起,我新来这个东西... – gwtUser