TextFieldJavaFXからデフォルトのフォーカスを削除します



Remove Default Focus From Textfield Javafx



解決:

私の場合、受け入れられた答えは機能していません。しかし、これはうまくいきました:

runLaterにラップされた親にフォーカスを要求しました。



@FXML public void initialize(){// unfocus pathField Platform.runLater(()-> root.requestFocus()); }

requestFocussの直接呼び出しは機能しません。


これを達成するための公的な方法がないため、直接的な方法はありません。ただし、トリックを使用してそれを行うことができます。あなたは持つことができますBooleanPropertyは、コントロールが初めてフォーカスされたときにチェックするだけです。聞くコントロールのfocusProperty()と、それが初めてフォーカスされるときに、フォーカスをそのコンテナーに委任します。残りのフォーカスについては、正常に機能します。



例:

javafx.application.Applicationをインポートします。インポートjavafx.beans.property.BooleanProperty;インポートjavafx.beans.property.SimpleBooleanProperty;インポートjavafx.geometry.Insets; javafx.scene.Sceneをインポートします。インポートjavafx.scene.control.TextField;インポートjavafx.scene.layout.HBox;インポートjavafx.scene.layout.VBox;インポートjavafx.stage.Stage; public class Main extends Application {@Override public void start(Stage primaryStage)throws Exception {final BooleanProperty firstTime = new SimpleBooleanProperty(true); //ステージロードにフォーカスを格納する変数VBoxvBox = new VBox(10); vBox.setPadding(new Insets(20)); TextField t1 = new TextField(); TextField t2 = new TextField(); TextField t3 = new TextField(); t1.setPromptText( 'FirstName'); t2.setPromptText( 'LastName'); t3.setPromptText( 'Email'); vBox.getChildren()。addAll(new HBox(t1、t2)、t3); primaryStage.setScene(new Scene(vBox、300、300)); primaryStage.show(); t1.focusedProperty()。addListener((observable、oldValue、newValue)-> {if(newValue && firstTime.get()){vBox.requestFocus(); //フォーカスをコンテナに委任しますfirstTime.setValue(false); / /将来の参照のために変数値が変更されました}}); } public static void main(String [] args){launch(args); }}

初期画面ロード時:

ここに画像の説明を入力してください




編集不可能なTextFieldでも同じ問題が発生し、毎回選択されて強調表示されていました。

myTextField.setFocusTraversable(false);を設定して解決しました。

この場合、フォーカスは次のUI要素に移動し、フォーカスしたくないすべての要素を設定する必要があることに注意してください。 Tabキーで要素を選択することもできなくなります。

ApiDocは、setFocusTraversable()はデフォルトでfalseであると述べていますが、明示的に呼び出されない限り、機能しないようです。