2016-10-25 9 views
0

Когда WebEngine завершает загрузку страницы, он добавляет прослушиватель «keydown» к элементу ввода текста. Как я могу получить, какая клавиша была нажата внутри слушателя?Найдите, какой ключ вызвал событие «keydown» DOM (с использованием JavaFX WebEngine)?

webEngine.getLoadWorker().stateProperty() 
     .addListener((ObservableValue<? extends State> ov, State oldState, 
       State newState) -> { 
        if (newState == State.SUCCEEDED) { 
         Document doc = webEngine.getDocument(); 
         Element ele = doc.getElementById("someInputField"); 

         ((EventTarget) ele).addEventListener("keydown", (event) -> { 
         //if triggering key is 'ENTER' 
          doSomeMethod(); 
        }, false); 

       } 
      }); 
+0

Довольно уверен, что это простой Java обертка вокруг двигателя JavaScript, так что это хорошая ставка, это в 'event' как' event.key' и/или 'event.keyCode'. –

ответ

0

событие является com.sun.webkit.dom.KeyboardEventImpl, так что вы можете получить ключ с getKeyCode() или getCharCode(). Не забывайте метаки, например shift, ctrl .... (getAltKey(), getCtrlKey(), getShiftKey(), getMetaKey()).

Самый быстрый способ получить тип - отражение. Но иногда отладчик не хочет говорить вам тип. Затем вы можете использовать старый трюк println.

((EventTarget) ele).addEventListener("keydown", (event) -> { 
    //if triggering key is 'ENTER' 
    System.out.println(event.toString()); 
    if ("Enter".contentEquals(((com.sun.webkit.dom.KeyboardEventImpl) event).getKeyIdentifier())) { 
     System.out.println("keydown on Enter"); 
    } 
}, false); 

Другой способ решить проблемы отладки с помощью java lambdas - не использовать их.

((EventTarget) ele).addEventListener("keydown", new EventListener() { 

    @Override 
    public void handleEvent(Event evt) { 
     System.out.println(String.valueOf(((com.sun.webkit.dom.KeyboardEventImpl) evt).getKeyCode())); 
     com.sun.webkit.dom.KeyboardEventImpl event = (com.sun.webkit.dom.KeyboardEventImpl) evt; 
     System.out.println(event.getKeyIdentifier()); 
    } 
}, false); 

Я думаю, что я старый ....