3

FXML ファイルからロードするときに、典型的な JavaFX の start() メソッドと思われるものを使用しています。

    public void start(Stage stage) throws Exception {
    this.stage = stage;
    Scene scene = new Scene(FXMLLoader.<AnchorPane>load(getClass().getResource("layout.fxml")));
    stage.setScene(scene);
    stage.show();
}

次のようなコントロールに対応する変数がいくつかあります。

    @FXML private TextField userName;

次のように、userName を Preferences の値に初期化したいと思います。

    prefs = Preferences.userRoot().node(this.getClass().getName());
    userName.setText(prefs.get("userName", userName.getText()));

しかし、いつこれを呼び出すことができますか?stage.show ()の前に実行すると、 userNameはまだインスタンス化されていません。

ティア

4

1 に答える 1

8

Controller を実装Initializableして、ロードをinitialize()次の場所に配置します。

public class Sample implements Initializable {
    @FXML private TextField userName;

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        Preferences prefs = Preferences.userRoot().node(this.getClass().getName());
        userName.setText(prefs.get("userName", userName.getText()));
    }    
}

また、デフォルトを使用してファイルResourceBundleに直接配置できることにも注意してください。fxmlファイルを作成my.propertiesし、ロード中に使用するだけです:

FXMLLoader.load(
    getClass().getResource("layout.fxml"),
    ResourceBundle.getBundle("my"));

次に、fxml で次のプロパティを使用できますmy.properties

<TextField fx:id="userName" text="%userName" />
于 2012-05-29T08:28:23.963 に答える