2016-03-09 46 views
1

基本要求是我的应用程序应该能够识别组合键ALT + S以保存任何形式,以便用户不必使用鼠标并将其一直用于'保存“按钮单击以保存表单。GWT - 如何将KeyDownHandler添加到Rootpanel

我想添加KeyDownHandler到这样的RootPanel,但这似乎并没有工作。

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()); 

有没有办法做到这一点?

回答

0

重要事件仅适用于您可以按下的文本编辑器。面板是一个div元素。你不能在div上按下。因此你不能。

+0

没错。只有当焦点位于任何TextBox上时,同一段代码才能工作。请注意,我将KeyDownHandler添加到RootPanel,而不是添加到任何FocusWidget。至少,我正在寻找一种解决方法来实现这一点。 – Vadiraj

+0

@Vadiraj是否尝试将tabindex 1设置为rootpanel? –

+0

在FocusWidget类中提供了setTabIndex()API。所以我不能将它设置为任何不可聚焦的小部件,比如RootPanel。 – Vadiraj

0

你可以尝试这样的事情:

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(); 
     } 
    } 
    } 
}); 

希望有所帮助。

+0

我很抱歉。这对我来说不是那么清楚。你想要添加处理程序的小部件?什么时候该控件来onPreviewNativeEvent()? – Vadiraj

+0

只需将此代码添加到EntryPoint中,您将收到发生在RootPanel中的每个事件,包括keydown,altkey等。 –

+0

我已更新答案。 –