大家好,我正在尝试学习JavaFX。
无论如何,我可以从main.java文件中更改其中一个节点或元素。 我如何从main.java文件中更改lowTextField文本?
我尝试使用
lowTextField.setText("仍在学习");在start方法中,它会引发各种错误。 Null Pointers等因为我只是不知道如何从主java中的fxml引用该文本字段。
我该怎么做呢?
这是主要的:
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
lowTextField.setText("This is The Console"); //<<this des not work
}
public static void main(String[] args) {
launch(args);
}
}
这是我的控制器文件。它现在什么都不做,但我知道控制器是用于操作,输入等。
public class Controller{
@FXML Button toolBarBtn1;
@FXML Button toolBarBtn2;
@FXML TextField lowTextField;
@FXML public BorderPane Root;
}
我知道我真的很简单,但我只想尝试一下。
我真的很感激任何帮助。
答案 0 :(得分:1)
如果在控制器中定义initialize()
方法,则会在注入@FXML
- 注释字段后调用它,因此您可以在那里访问它们:
public class Controller{
@FXML Button toolBarBtn1;
@FXML Button toolBarBtn2;
@FXML TextField lowTextField;
@FXML BorderPane Root;
public void initialize() {
lowTextField.setText("This is The Console");
}
}
答案 1 :(得分:0)
理想情况下,您不希望直接更改其他类中的字段。相反,在Controller类中,创建setter和getter来操作字段。
以下是您可以在Controller.java中放置的示例:
public void setLowTextField (String text) {
this.lowTextField.setText(text); // Calls the setText() method of the local TextField
}
然后在Main.java文件中,只需在创建Controller后调用该方法。
FXMLLoader loader = new FXMLLoader(getClass().getResource("sample.fxml"));
// You first need to create a reference to your controller
Controller controller = new Controller();
loader.setController(controller);
Parent root = loader.load()
// Now call the setter from the Controller.java file:
controller.setLowTextField("This is The Console");
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
这被认为是最佳实践,因为您可以将Controller.java中的@FXML变量声明为私有,但仍然可以从Main类访问它们。