JavaFX: где лучшее место для объявления узлов контроллера
Я создал собственный контроллер LoginFieldsController, который наследуется от класса VBox. Позже в программах я использую этот контроллер как обычный узел, такой как 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 ответа
Я настоятельно рекомендую объявлять их вне конструктора как поля. Таким образом, вы можете получить к ним доступ другими способами, когда вам нужно что-то с ними сделать. Вы можете использовать конструктор для внедрения этих полей, если вам нужно сделать это при создании экземпляра объекта, или у вас могут быть сеттеры для их внедрения позже.
Рассмотрим следующий код:
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
}
В sidenote я бы использовал графические элементы (например, VBox в вашем примере) только для части представления (предполагаю, что вы используете MVC, так как вы используете контроллеры) и написал бы отдельный класс контроллеров.
Хорошо держать их вне конструктора, особенно если вам нужен доступ к ним позже (например, чтобы получить их текущее значение)