我想在我的場景中聽一些KeyEvent,例如KeyCode.ESCAPE
(按下時關閉場景)。現在JavaFX KeyEvent傳播順序
scene.addEventHandler(KeyEvent.ANY, event -> {
if (event.isConsumed())
return;
switch (event.getCode()) {
case ESCAPE:
stage.hide();
event.consume();
break;
default:
break;
}
});
,裏面的場景節點可能已經聽過太ESCAPE
。
// ....
someOtherNode.addEventHandler(KeyEvent.ANY, e -> {
if (e.getCode() == KeyCode.ESCAPE) {
// do stuff
e.consume();
}
});
// ....
如何確保從節點消耗KeyEvent
而不是場景?
基於從Oracle在圖上,一種解決方法是在偵聽KeyCode
小號
但有一個更好的解決方案,像反轉節點等級的末尾添加一個虛設Node
傳播路線?
編輯:
用例:
,阻止其他節點需要監聽的ESC鍵或focusProperty()
,以便它可以關閉本身就是一個彈出式節點。
我可能很密集,但是這不是過濾器和處理程序的用途嗎?過濾器在捕獲階段停止事件(如果消耗)。事後處理程序可以在冒泡階段觸發。一個是另一個的反面。 – brian