Как обновить центральный узел BorderPane с помощью FXML Controller - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь обновить центральный узел BorderPane, используя FXML.Я создал VBox слева с кнопками, и при нажатии они должны обновлять центральный узел, однако центральный узел не обновляется.Может кто-то пролить свет на то, что я делаю неправильно?

Я знаю, что события кнопок работают (они печатают на экран usiong println), но он не будет обновлять пользовательский интерфейс.

Корневые узлы.fxml (BorderPane):

<?import javafx.scene.layout.BorderPane?>

<BorderPane xmlns:fx="http://javafx.com/fxml" fx:id="rootPane">

    <left>
    </left>

    <center>
    </center>

</BorderPane>

Меню

<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Button?>

<VBox fx:controller="" xmlns:fx="http://javafx.com/fxml" >
    <children>
        <Button text="Dashboard"            fx:id="dashboardButton" onAction="#dashboardButtonEvent"    />
        <Button text="Sales"                fx:id="salesButton"     onAction="#salesButtonEvent"        />
    </children>
</VBox>

Контроллер Menu

public class MenuController implements Initializable {

    @FXML
    private BorderPane rootPane;

    @FXML
    private Button dashboardButton; //same name as in the menu.fxml file

    @FXML
    private Button salesButton; //same name as in the menu.fxml file

    @FXML
    private void dashboardButtonEvent(ActionEvent event) {
        try {
            VBox dashboard = FXMLLoader.load(getClass().getResource("../../../fxml/dashboard.fxml"));
            rootPane = FXMLLoader.load(getClass().getResource("../../../fxml/root.fxml"));
            rootPane.setCenter(dashboard);
        } catch (IOException e) { System.out.println(e); }
    }

    @FXML
    private void salesButtonEvent(ActionEvent event) {
        try {
            VBox sales = FXMLLoader.load(getClass().getResource("../../../fxml/sales.fxml"));
            rootPane = FXMLLoader.load(getClass().getResource("../../../fxml/root.fxml"));
            rootPane.setCenter(sales);

        } catch (IOException e) { System.out.println(e); }
    }

    @Override
    public void initialize(URL url, ResourceBundle resourceBundle) {

    }
}

Я предполагаю, что я иду не так, как ясобираемся назначить корневую панель, используя rootPane = FXMLLoader.load (getClass (). getResource ("../../../ fxml / root.fxml")) ;.Если это так, как мне получить текущее rootPane из существующей сцены?

...