我尝试在 GWT 中为节点创建具有多项选择的树,并遇到了类似于此问题的问题 Shift Key in GWT? . 从树中引发 selectionEvent 时,我想知道是否按下了 Shift 键。
SelectionHandler<TreeItem> getSelectionHandler() {
return new SelectionHandler<TreeItem>(){
@Override
public void onSelection(SelectionEvent<TreeItem> event) {
// is shift key pressed ?
}
};
}
上述问题的解决方案不适用于这种情况,因为 SelectionHandler 类没有继承自 DOMEvent,因此没有 getNativeEvent() 函数。
我尝试了一个肮脏的解决方案,通过将 keyDownEventHandler 和 keyUpEventHandler 添加到带有 boolean 标志的树中,但是仅当焦点位于树上时才会调用处理程序,因此这不起作用。
是否有一个简单的解决方案(或者即使不简单也只是一个解决方案)?谢谢。
编辑 aem 响应: 该解决方案可以通过使用 keyUp/DownHandler 将组件封闭在 FocusPanel 中来工作,但随后我无法添加任何需要键盘输入的组件,例如 TextArea,因为“全局”处理程序具有优先权......所以它并没有真正解决我的问题。
最佳答案
我的建议是创建一个临时存储事件的自定义 Tree 类,并通过覆盖 onBrowseEvent
方法来存储此事件。然后,您可以在 onSelection
方法中,通过检查此存储的事件来检查是否按下了 shift 键。由于 JavaScript 不是并发的,因此使用私有(private)变量应该没有问题。代码将是这样的:
public class MyTree extends Tree {
private Event currentEvent;
... constructors...
// Call this method from within the onSelection method to determine if the shift key
// was pressed.
public boolean isShiftPressed() {
return currentEvent != null ? currentEvent.getShiftKey() : false;
}
@Override
public void onBrowserEvent(Event event) {
currentEvent = event;
super.onBrowserEvent(event);
currentEvent = null;
}
}
关于java - 在 GWT 中,如果按下 Shift 按钮,如何从树中的 SelectionEvent 知道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2645039/