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

时间:2019-02-18 14:39:17

标签: java oop javafx jfoenix

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

问题:是否最好将LoginFieldsController节点声明为LoginFieldsController类的字段,或者将其声明为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);
        ...
}

2 个答案:

答案 0 :(得分:0)

最好将它们保留在构造函数之外,特别是如果您以后需要访问它们(例如,获取它们的当前值)

答案 1 :(得分:0)

我强烈建议在构造函数之外将它们声明为字段。这样,当您需要对它们执行某些操作时,可以使用其他方法来访问它们。如果需要在对象实例化时进行构造,则可以使用构造函数来注入这些字段,也可以让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,因为您使用的是控制器),并编写了一个单独的控制器课。