我如何在Main?

时间:2016-07-26 17:15:27

标签: java javafx fxml

大家好,我正在尝试学习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;

   }

我知道我真的很简单,但我只想尝试一下。

我真的很感激任何帮助。

2 个答案:

答案 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类访问它们。