0

問題:
tabPane タブに問題がない。
最初のタブにはテキスト フィールドがあります。アプリケーションを起動すると、このフィールドにフォーカスできます。タブを変更して最初のタブに戻った後、マウスでフィールドを選択しなくても、このテキストフィールドにフォーカスを置きたい (バーコードリーダーはこのフィールドでアクティブにする必要があります)。

タブからイベントをキャッチできます

 tp.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Tab>()
   { etc

(コードで投稿できませんでした)

最初のタブのイベントをトリガーできます。しかし、field.requestFocus(); 動作しません。おそらく、このメソッドがテキストフィールドをレンダリングする前に来るためです。

だからここに私の質問があります:

TabPane でタブをクリックした後、コントロールにフォーカスを設定するにはどうすればよいですか?

4

2 に答える 2

1

マウス リリース イベントを処理すると、次のように動作します (doFocus は、以前にタブ選択が変更された場合にのみ requestFocus 処理を有効にします。それ以外の場合は、TabPane のどこかをクリックするたびに開始されます)。

    final SimpleBooleanProperty doFocus = new SimpleBooleanProperty(false);
    tabPane.setOnMouseReleased(new EventHandler<Event>() {
        @Override
        public void handle(Event event) {
            if (!doFocus.get()) {
                return;
            }
            doFocus.set(false);
            switch (tabPane.selectionModelProperty().getValue().selectedIndexProperty().intValue()) {
            case 0: tf1b.requestFocus(); break;
            case 1: tf2a.requestFocus(); break;
            default: break;
            }
        }
    });
    tabPane.selectionModelProperty().getValue().selectedIndexProperty().addListener(new ChangeListener<Number>() {
        @Override
        public void changed(ObservableValue<? extends Number> observable,
                Number oldValue, Number newValue) {
            doFocus.set(true);
        }
    });

TabPane にフォーカスがある場合、カーソル キーを使用してタブの選択を変更できますが、TextField も選択ベースのアプローチではフォーカスを取得しません。必要に応じて、これもおそらく処理する必要があります。

(最近、私は同様の問題を抱えていました。マウス ボタンを押すと、TabPane がすぐにタブを切り替えることに気付きました。私の推測では、選択ベースのアプローチでは、マウスを押した直後に TextField にフォーカスが要求されますが、マウスを押し続けると盗まれます。フォーカスが TabPane に戻る.または、選択を変更する単一のマウス ダウン イベントでさえ、フォーカスが TabPane に戻る.ただし、私は JavaFX の初心者であるため、理由に関する私の仮定は正しくない可能性があります.)

編集: その処理は確かに最適ではありません。たとえば、キーでタブを変更すると、doFocus が有効になり、TabPane 内の任意の場所をクリックすると、requestFocus 呼び出しがトリガーされます。これは言及すべきだと思いました。

于 2013-03-26T22:28:10.310 に答える
0

また、ユーザーが(マウスまたはキーボードを使用して)選択したタブを変更したときに、TextAreaにフォーカスを設定するための私のソリューションを見てください https://stackoverflow.com/a/19046535/2791746

于 2013-09-27T08:53:37.477 に答える