次の場合:
1)3つの代替案、
a-キーイベントハンドラーをダイアログボックスペインに追加して、Tabキーの押下をキャッチします
dialogbox.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
@Override
public void handle(javafx.scene.input.KeyEvent event) {
if (event.getCode() == KeyCode.TAB) {
System.out.println("TAB pressed");
event.consume(); // do nothing
}
}
});
b-StackPane
最後に追加されたダイアログボックスの子を除くメインのすべての子を一時的に無効にします。
// Assuming dialogbox is at last in the children list
for(int i=0; i<mainPane.getChildren().size()-1; i++){
// Disabling will propagate to sub children recursively
mainPane.getChildren().get(i).setDisable(true);
}
c- bと同じですが、 node.setFocusTraversable(false)
(スポットキック)によるコントロールへのフォーカスを手動で無効にします。確かにこれはあなたの選択ではありません。
2)ダイアログが表示された後にどのノードがフォーカスを取得するかをダイアログボックスに指示します(コンストラクターまたはセッターメソッドを使用)。
// init dialogbox and show it then
dialogbox.setFocusTo(node_in_dialogbox);