Назначение элементов FXML в контроллере из недавно добавленной панели - JavaFX - PullRequest
0 голосов
/ 13 октября 2018

Предположим, для простоты, у меня есть 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,так что извините за любые опечатки.

...