私はJavaFX 2.1を使用し、FXMLを使用してGUIを作成しました。このGUIのコントローラにはmyTextField.requestFocus();
を追加しました。TextFieldのRequestFocusが機能しません
しかし、私はいつも他のコントロールに焦点を当てています。
私はJavaFX 2.1を使用し、FXMLを使用してGUIを作成しました。このGUIのコントローラにはmyTextField.requestFocus();
を追加しました。TextFieldのRequestFocusが機能しません
しかし、私はいつも他のコントロールに焦点を当てています。
initialize()
の時点で、制御装置はまだ焦点を処理する準備ができていない。
あなたは、次のトリック試すことができます。
private void repeatFocus(Node node) {
Platform.runLater(() -> {
if (!node.isFocused()) {
node.requestFocus();
repeatFocus(node);
}
});
}
:あなたはこのルーチンを数回繰り返して、1次のメソッドラインを呼び出したいことが難しい複雑なアプリケーション(Pavel_Kコメントに持っているよう)について
@Override
public void initialize(URL url, ResourceBundle rb) {
Platform.runLater(new Runnable() {
@Override
public void run() {
tf.requestFocus();
}
});
}
を
これは文書化されていないアプローチであり、将来のJavaリリースで何かが変更されたか壊れた場合、無限ループを回避するために繰り返しの制限を追加することをお勧めします。アプリ全体よりもフォーカスを失う。 :)
もしあなたがrequestFocus();シーンを初期化した後、動作します!このよう
:
Stage stage = new Stage();
GridPane grid = new GridPane();
//... add buttons&stuff to pane
Scene scene = new Scene(grid, 800, 600);
TEXTFIELD.requestFocus();
stage.setScene(scene);
stage.show();
私はこのことができます願っています。 :)
@ Sergey Grinevとまったく同じ答えです。ご使用のJavaのバージョンが最新(JDK 1.8以降)であることを確認してください。
Platform.runLater(()->myTextField.requestFocus());
これは私のために働く、ありがとう! – Adil
私は多少関連した問題を抱えていました。私の 'TextArea'は、ステージが可視でアクティブであってもフォーカスをプログラム的に得ることを拒否しました**と**現在実行中のスレッドはJavaFXアプリケーションスレッドでした。しかし、私がこの例に従って、新しい 'Runnable'を待ち行列に入れると、うまくいきました。本当に奇妙なことに、私はそれについて言葉を持っていません。 –
これはもはやJavaFX 8では動作しないようです。 'tf == null'は、' initialize'が実行された時点でまだ真です。 – skiwi