我有一个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代码。
答案 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);
}
// ...
}