如何在javaFX中对GUI进行最小的更改

时间:2016-12-25 01:24:48

标签: java javafx fxml scenebuilder fxmlloader

是否有一种在javaFX中对GUI应用(小)更改的首选方法?我更喜欢使用FXML而不是以编程方式进行。

例如:应用程序以后台和VBox中的一些按钮启动(它们的排列方式与FXML文件中定义的相同)。

假设用户按下按钮(例如在游戏中按钮被命名为“多人游戏”),因此GUI必须更改以显示下一步。

在这个例子中,我喜欢实现按钮被命名为其他东西,另一个按钮被替换为文本字段,并且可能会应用其他一些小的更改。但是大多数GUI将保持不变,例如背景,VBox本身和一些按钮。

我应该使用vbox.getChildren().remove(button);vbox.getChildren().add(textField);之类的方式以编程方式应用这些更改吗?但为什么要使用FXML呢?我可以以编程方式执行整个GUI,而不是仅加载起始fxml场景,然后以编程方式应用更改。

或者我应该从不同的FXML文件中加载一个新场景,在FXML文件中进行这些更改。但后来我注意到我的应用程序需要很长时间才能通过FXMLLoader加载新的FXML文件并在短时间内显示白屏。

或者我应该将我的FXML文件分成不同的层,以便我可以只与另一个VBox交换VBox而不是替换整个GUI?但是我应该如何构建我的GUI,我还能使用SceneBuilder吗?

可能我的所有方式都不是首选方式。那么我怎样才能以一种好的方式实现我的目标呢?

如果您想查看我当前的代码,我之前已将其发布在this thread

1 个答案:

答案 0 :(得分:1)

不是在fxml中定义ButtonTextField,而是在那里定义一个容器,例如Pane。然后更改控制器中Pane内的内容:

@FXML 
private Pane flexiblePane;

private Button myButton = new Button();
private TextField myTextField = new TextField();


private void displayFlexiblePaneAsButton(boolean flag) {
    if (flag) {
        flexiblePane.getChildren().clear();
        flexiblePane.getChildren().add(myButton);
    }
    else {
        flexiblePane.getChildren().clear();
        flexiblePane.getChildren().add(myTextField);
    }
}