查找哪个键触发了DOM“ keydown”事件(使用JavaFX WebEngine)?

火花角

WebEngine完成页面加载后,将“ 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);

                }
            });
凯尔

该事件为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);

我想我老了...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章