我正在使用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