JavaFX:声明控制器节点的最佳位置在哪里

JavaFX: where is the best place to declare nodes of controller

我创建了一个继承自 VBox class 的 LoginFieldsController 自定义控制器。稍后在程序中我将此控制器用作普通节点,如 Button、TextFiled 等。请注意,我只编写纯 Java 代码,不使用 FXML。

问题:将 LoginFieldsController 节点声明为 LoginFieldsController class 的字段或在 LoginFieldsController 构造函数内部更好?在构造函数之外我什么也没做。

换句话说,这样比较好:

public class LoginFieldsController extends VBox {
    private TextField loginField;
    private TextField passwordField;

    public LoginFieldsController( ... ) {
        loginField = new TextFeild("Login");
        passwordField = new TextFeild("Password"); 
        this.addAll(loginField, passwordField);
        ...
}

或者说:

public class LoginFieldsController extends VBox {

    //no fields in that class

    public LoginFieldsController( ... ) { 
        TextField loginField = new TextFeild("Login");
        TextField passwordField = new TextFeild("Password"); 

        this.addAll(loginField, passwordField);
        ...
}

最好将它们放在构造函数之外,尤其是当您以后需要访问它们时(例如获取它们的当前值)

我强烈建议在构造函数之外将它们声明为字段。这样,当您需要对它们执行某些操作时,您可以通过其他方法访问它们。如果您需要在对象实例化时注入这些字段,您可以使用构造函数注入这些字段,或者您可以让 setter 稍后注入它们。

考虑以下代码:

Class Example{

  public Example(...){
    TextField text1 = new TextField();
    //some other code
  }

  public boolean checkData(){
    //text1 is not visible here
  }

另一方面:

Class Example{

  TextField text1; 

  public Example(...){
    text1 = new TextField();
    //some other code
  }

  public boolean checkData(){
    //text1 is visible here
  }

在旁注中,我将仅对 view 部分使用图形元素(例如您示例中的 VBox)(猜测您使用 MVC,因为您使用的是控制器)并编写一个单独的控制器 class.