java - 在 GWT 中,如果按下 Shift 按钮,如何从树中的 SelectionEvent 知道

标签 java gwt event-handling

我尝试在 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/

相关文章:

java - GWT 布局 : How would I fix this layout (DockPanel)?

gwt - 使用 AsyncDataProvider 进行列排序 - 如何找出用户想要排序的列?

gwt - 如何从 Google Web Toolkit 进行 REST 调用?

javascript - 读取数组 onclick javascript 中的一项

java - 如果 sleep 中断线程被唤醒,是否应该中断自身?

java - Java EE/Jakarta EE 是否支持 Java 模块系统?是否可以使用 Java 模块系统制作 Web 应用程序?

c# - 我应该如何在 Java 中复制 C#'s ' using' 语句的功能?

java - 将 getByte() 与原始数据一起使用

asp.net - 页面加载时,将调用连接到 LinkBut​​ton.Click 的事件处理程序

用于移动形状的 JavaFx 按钮事件处理程序