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

时间:2016-10-25 00:15:41

标签: java 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);

                }
            });

1 个答案:

答案 0 :(得分: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);

我想,我已经老了......