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

Справа. Один и тот же фрагмент кода работал только тогда, когда основное внимание уделялось любому текстовому блоку. Обратите внимание: я добавляю KeyDownHandler к RootPanel, а не к FocusWidget. Как минимум, я ищу обходное решение для этого. – Vadiraj

+0

@ Vadiraj Вы пытались настроить tabindex 1 на rootpanel? –

+0

setTabIndex() API предоставляется в классе FocusWidget. Поэтому я не могу установить его для любого неаккуратного виджета, такого как 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

Я обновил ответ. –