Java 在GWT中,如果按下Shift按钮,如何从树中的SelectionEvent中知道
我尝试在GWT中创建一个具有多个节点选择的树,遇到了类似于此问题的问题。 当从树中引发selectionEvent时,我想知道是否按下了Shift键Java 在GWT中,如果按下Shift按钮,如何从树中的SelectionEvent中知道,java,gwt,event-handling,Java,Gwt,Event Handling,我尝试在GWT中创建一个具有多个节点选择的树,遇到了类似于此问题的问题。 当从树中引发selectionEvent时,我想知道是否按下了Shift键 SelectionHandler<TreeItem> getSelectionHandler() { return new SelectionHandler<TreeItem>(){ @Override public void onSelection(SelectionEvent<
SelectionHandler<TreeItem> getSelectionHandler() {
return new SelectionHandler<TreeItem>(){
@Override
public void onSelection(SelectionEvent<TreeItem> event) {
// is shift key pressed ?
}
};
}
SelectionHandler getSelectionHandler(){
返回新的SelectionHandler(){
@凌驾
选举时公共无效(SelectionEvent事件){
//按下shift键了吗?
}
};
}
上述问题中的解决方案在这种情况下不适用,因为SelectionHandler类没有从DomeEvent继承,因此没有getNativeEvent()函数
我尝试了一个肮脏的解决方案,通过使用布尔标志将keyDownEventHandler和keyUpEventHandler添加到树中,但仅当焦点位于树上时才调用处理程序,因此这不起作用
是否有一个简单的解决方案(或者仅仅是一个解决方案,即使它并不简单)?谢谢
编辑aem响应:
解决方案可以通过将组件封装在带有键向上/向下处理程序的FocusPanel中来实现,但是我不能添加任何需要键盘输入的组件,例如TextArea,因为“全局”处理程序具有优先权。。。所以这并不能真正解决我的问题。我不确定这是否有效,但值得一试: 如何将键处理程序添加到包含树的根面板中,并让它们设置一个布尔值,指示Shift键是否已关闭?然后树的SelectionHandler可以检查该布尔值
这样做的问题是,页面可能包含捕获关键事件的其他小部件,这会让用户觉得这种行为很不正常。我的建议是创建一个自定义树类,临时存储事件,并通过重写
onBrowseEvent
方法存储此事件。然后,您可以在onSelection
方法中,通过检查此存储事件来检查是否按下了shift键。因为JavaScript不是并发的,所以使用私有变量应该没有问题。代码如下所示:
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;
}
}