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.
我创建了一个继承自 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.