2016-03-09 48 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

我已更新答案。 –