Java GWT-如何将KeyDownHandler添加到根面板

Java GWT-如何将KeyDownHandler添加到根面板,java,gwt,keyboard-events,Java,Gwt,Keyboard Events,基本要求是,我的应用程序应该能够识别ALT+S组合键来保存任何表单,这样用户就不必使用鼠标一直点击“保存”按钮来保存表单 我正试图像这样将KeyDownHandler添加到根面板,但这似乎不起作用 RootPanel rootPanel = RootPanel.get("mainpanel"); KeyDownHandler handler = new KeyDownHandler() { @Override public void onKeyDown(KeyDownEvent

基本要求是,我的应用程序应该能够识别ALT+S组合键来保存任何表单,这样用户就不必使用鼠标一直点击“保存”按钮来保存表单

我正试图像这样将KeyDownHandler添加到根面板,但这似乎不起作用

RootPanel rootPanel = RootPanel.get("mainpanel");

KeyDownHandler handler = new KeyDownHandler() {
    @Override
    public void onKeyDown(KeyDownEvent arg0) {

        if (arg0.isAltKeyDown() && arg0.getNativeKeyCode() == 83) {
            save();
        }
    }
};

rootPanel.addDomHandler(handler, KeyDownEvent.getType());

有什么方法可以做到这一点吗?

关键事件只能在文本编辑器上工作,您可以在其中按。面板是一个div元素。你不能在div上下键,因此你不能

您可以尝试以下方法:

Event.addNativePreviewHandler(new Event.NativePreviewHandler() {
  @Override
  public void onPreviewNativeEvent(Event.NativePreviewEvent event) {
    if (event.getNativeEvent()
             .getType().equals("keydown")) {
      if (event.getNativeEvent().getAltKey() &&
          event.getNativeEvent().getKeyCode() == KeyCodes.KEY_S) {
        save();
      }
    }
  }
});

希望这能有所帮助。

对。同一段代码仅在焦点位于任何文本框上时才起作用。请注意,我将KeyDownHandler添加到根面板,而不是任何FocusWidget。至少,我正在寻找一种解决方法来完成此任务。@Vadiraj您是否尝试将tabindex 1设置为rootpanel?FocusWidget类中提供了setTabIndex()API。所以我不能将它设置为任何不可聚焦的小部件,比如RootPanel。@Vadiraj就是这样,你不能让它工作,除非你有焦点:)我不相信“它不可能做到!”:)当你在facebook上时,试着按ALT+3(无论控件或焦点在哪里),它将带你进入好友列表。我只是想要一个类似的功能来识别组合键。对不起。我对此并不清楚。您试图将处理程序添加到哪个小部件?控件何时到达onPreviewActivieEvent()?只需将此代码添加到入口点,您就会收到根面板中发生的所有事件,包括keydown、altkey等。这太棒了!成功了。非常感谢你。但是,KeyCodes.KEY_不存在。KeyCodes仅包含不可打印的密钥。我刚计算出按钮的按键代码是83。我只需要确保83在所有浏览器中都是“s”。应该定义KeyCodes:KEY_s在所有浏览器中都定义为83使用GWT 2.4。可能该类已在一个更高版本中更新。