找到哪个键触发了 DOM "keydown" 事件(使用 JavaFX WebEngine)?
Find which key triggered DOM "keydown" event (using 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()
获得Key。不要忘记 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 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);
我觉得,我老了....
当 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()
获得Key。不要忘记 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 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);
我觉得,我老了....