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还没有被实例化。

TIA

4

1 回答 1

8

使您的控制器实现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 回答