2016-10-25 49 views
0

当WebEngine加载完页面后,它会向文本输入元素添加一个“keydown”侦听器。 如何检索从监听器中按下哪个键?查找哪个键触发了DOM“keydown”事件(使用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

敢肯定这是JavaScript引擎围绕一个简单的Java包装,所以这是一个不错的选择,它在'event'为'event.key'和/或'event.keyCode'。 –

回答

0

事件是一个com.sun.webkit.dom.KeyboardEventImpl,这样你就可以得到getKeyCode()getCharCode()的关键。不要忘记像shift,ctrl ....(getAltKey(),getCtrlKey(),getShiftKey(),getMetaKey())这样的metakeys。

获得类型的最快方法是反射。但有时调试器不想告诉你类型。然后你可以使用一个古老的技巧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 lambda的调试问题的方法是,不要使用它们。

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

我想,我是老....