Предположим, для простоты, у меня есть FXML
с SplitPane
.С одной стороны у меня есть кнопка;у другого есть пустой AnchorPane
(пока).
Кнопка просто помещает панель на другую сторону SplitPane
из другого файла FXML
.Недавно добавленная панель содержит кнопку и метку.Оба FXML
имеют один и тот же контроллер по двум причинам: 1. Добавленная панель FXML
нигде не используется, 2. Добавленная панель FXML
имеет так мало функций, что на самом деле не стоит иметь отдельный контроллер дляit.
Нажатие кнопки на новой добавленной панели устанавливает текст в метке на "Hello World"
.
Split Pane
<SplitPane fx:controller="myController".... >
<items>
<VBox .... >
<Button fx:id="mainButton" onAction="#handleFirstButton".... />
</VBox>
<AnchorPane fx:id="secondPane" ....>
</items>
</SplitPane>
Добавленная панель
<VBox fx:controller="myController" ....>
<Button fx:id="btn" onAction="#changeText" ... />
<Label fx:id="lbl" .... />
</VBox>
Класс контроллера
// Regular stuff here
@FXML
AnchorPane secondPane;
@FXML
Button mainButton;
@FXML
Button btn;
@FXML
Label lbl;
public void initialize(URL arg0, ResourceBundle arg1) {
}
private void loadSecondPane {
FXMLLoader loader = FXMLLoader.load(getClass().getResource("AddedPane.fxml"));
VBox box = loader.load();
secondPane.setTopAnchor(box);
}
@FXML
private void handleFirstButton(ActionEvent event) {
loadSecondPane();
}
@FXML
private void changeText(ActionEvent event) {
lbl.setText("Hello World");
}
Проблема в том, что при загрузке добавленной панели ее компоненты НЕ будутопределенный в контроллере, и попытка выполнить любой метод для них приведет к NullPointerException
.
Есть ли способ обойти это или в этом случае требуется отдельный контроллер?И при условии, что у меня есть 2+ кнопки на первой стороне панели, и каждая кнопка создает другую панель на другой стороне, решение остается тем же самым?
ПРИМЕЧАНИЕ: я довольно новичок в javafx,так что извините за любые опечатки.