2016-10-25 8 views
0

WebEngineがページのロードを終了すると、テキスト入力要素に「キーダウン」リスナーが追加されます。 リスナー内でどのキーが押されたのかを取得するにはどうすればよいですか?JavaFX WebEngineを使用して、どのキーで起動されたDOM "keydown"イベントを検出しますか?

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.key'としてevent''にあります良い賭けだかなり確信しておよび/または '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ラムダでのデバッグの問題を解決する別の方法は、使用しないことです。

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

私は古い....だと、考えて

関連する問題