4

ノードを軽量ダイアログとして表示するための再利用可能なメソッドを実装しようとしています。ノードはStackPaneの上部に追加され、背景がぼやけます。2つの問題があります:

1)スタックペインのバックグラウンドノードのコントロールは、引き続きフォーカスを受け取ることができます。

2)トップレベルノードにフォーカスを与えるにはどうすればよいですか。NodeにrequestFocusメソッドがあることは知っていますが、ノード内にネストされたコントロールにそれを与える必要があります。これは再利用可能な方法であることが意図されているため、コントロールを直接参照することはできません。

(既存の実装を見つけることで問題全体を回避できるのであれば、それが最善ですが、サードパーティのソリューションはまだ見つかりません)

ありがとう

4

1 に答える 1

4

次の場合:
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);
于 2012-06-26T09:28:49.350 に答える