JavaFX具有不同窗格的相同文本区域

时间:2016-10-24 16:45:19

标签: java javafx fxml

我有一个maven,javafx和fxml的项目。我有一个主要的BorderPane,welcome.fxml和Pane,ready.fxml

我的开始方法是;

@Override
public void start(Stage primaryStage) throws Exception {

    try {
      Pane root = (Pane) FXMLLoader.load(getClass().getResource("welcome.fxml"));
      Scene scene = new Scene(root, 640, 480);
      primaryStage.setScene(scene);
      primaryStage.show();
    } catch (Exception e) {
      makeAlert(e, false);
    }
}

现在,我的welcome.fxml中有一个按钮,我想用ready.fxml更改我的BorderPane中心。这是我的按钮处理程序;

@FXML
private void buttonHandler() throws IOException, InterruptedException {


    stage = (Stage) myButton.getScene().getWindow();
    Pane sub = (Pane) FXMLLoader.load(getClass().getResource("../ready.fxml"));
    BorderPane root = (BorderPane) FXMLLoader.load(getClass().getResource("../welcome.fxml"));
    root.setCenter(sub);

    //Scene scene = new Scene(root, 640, 480);
    //stage.getScene().setRoot(root);
}

更新:这是我的错误,正如@James_D注意到的那样,我再次在我的控制器中加载welcome.fxml,所以,我的整个场景只改变了中心位置。

应该是正确的方法;

stage = (Stage) brokerConnect.getScene().getWindow();
Pane center = (Pane) FXMLLoader.load(getClass().getResource("../ready.fxml"));
// FIXME: Get root like this
BorderPane root = (BorderPane) stage.getScene().getRoot();
root.setCenter(center);

已编辑:已添加Java代码。

1 个答案:

答案 0 :(得分:1)

您应该更新现有边框窗格的中心,而不是创建新窗格并设置新窗口的中心。

您只需要以通常的方式将边框窗格注入控制器。因此,fx:id添加welcome.fxml的根元素:

<!-- imports, etc... -->
<BorderPane fx:id="root" fx:controller="..." xmlns:fx="..." ... >
    <!-- ... -->
</BorderPane>

然后在控制器中

public class Controller { /* or whatever name you have, again, you can't be bothered to post a MCVE */

    @FXML
    private BorderPane root ;

    @FXML
    private void buttonHandler() throws IOException {
        Pane sub = (Pane) FXMLLoader.load(getClass().getResource("../ready.fxml"));
        root.setCenter(sub);
    }

    // ...
}