キーボードの矢印でのみ使用できるJavaFXでアプリケーションを作成しました。そこで、SceneのステージでMouseEventを禁止し、KeyEventsを「リッスン」しました。また、すべてのノードのフォーカス機能をオフにしました。
for(Node n : children) {
n.setFocusTraversable(false);
これで、いくつかのテキストフィールド、チェックボックス、ボタンができました。入力コントロール(テキストフィールド、チェックボックスなど)の状態をプログラムで変更したいと思います。たとえば、テキストフィールドを入力してコンテンツをプログラムで編集したいと思います。だから私の質問は次のとおりです。非フォーカストラバース可能なテキストフィールドに入力する方法ですか? textfield.requestFocus();私はテキストフィールドのfocustraversableプロパティにfalseを設定したため、もう機能しません。
ありがとう
沿って
_n.setFocusTraversable(false);
_
ノードは、フォーカス不可ではなく、フォーカストラバーサル不可になります。マウスやプログラムを使用して、たとえば焦点を合わせることができます。マウスイベントを防止したので、ここで他のオプション:
_Platform.runLater(new Runnable() {
@Override
public void run() {
textfield.requestFocus();
}
});
Scene scene = new Scene(root);
_
編集:コメントごとrequestFocus
のjavadocの状態:
...フォーカスを受け取る資格を得るには、ノードがシーンの一部であり、そのノードとそのすべての祖先が表示されている必要があり、無効にしないでください。 ...
したがって、このメソッドは、次のようにシーングラフの構築後に呼び出す必要があります。
_Scene scene = new Scene(root);
textfield.requestFocus();
_
ただし、上記のPlatform.runLaterは、最後にメインメソッドstart()
の後に実行されます。これにより、requestFocusの呼び出しがシーングラフの結合の後になります。
RequestFocus実装コードに応じて、他の理由が考えられます。
.requestFocus();を設定しますコントローラをロードする.fxmlファイルで起動するinitializeメソッド
@Override
public void initialize(URL url, ResourceBundle rb) {
/* the field defined on .fxml document
@FXML
private TextField txtYear;
*/
txtYear.requestFocus();
}