当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);
}
});
答案 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);
我想,我已经老了......