【发布时间】:2014-05-31 20:49:30
【问题描述】:
我正在尝试使用 JavaFX 和 SceneBuilder 实现一个应用程序。
我用不同的按钮制作了一个主菜单,每个按钮都指向不同的页面。
例如,当我单击第一个按钮时,我希望切换到一个新面板,然后,如果我想返回上一个面板,我只需单击“返回”按钮我得到的第二个面板。
第一步,当我点击按钮时有一个新页面,没关系。现在问题在于实现“返回”按钮。我想点击它,并拥有上一个面板,但我没有找到解决方案。
代码如下:
我的应用程序的启动方法(OrderCheck.java)
@Override
public void start(Stage primaryStage) throws Exception {
this.primaryStage = primaryStage;
FXMLLoader myLoader = new FXMLLoader(getClass().getResource("OrderCheck.fxml"));
Pane myPane = (Pane)myLoader.load();
primaryStage.setTitle("Main Menu");
OrderCheckController controller = (OrderCheckController) myLoader.getController();
controller.setPrevStage(primaryStage);
Scene myScene = new Scene(myPane);
primaryStage.setScene(myScene);
primaryStage.show();
}
主面板上1个按钮的onAction示例:(OrderCheckController.java):
public void personalButtonAction(ActionEvent event) throws IOException {
Stage stage = new Stage();
stage.setTitle("Personal Menu");
AnchorPane myPane = null;
myPane = FXMLLoader.load(getClass().getResource("Personal.fxml"));
Scene scene = new Scene(myPane);
stage.setScene(scene);
prevStage.close();
stage.show();
}
单击新视图中的后退按钮的示例 (PersonalController.java):
public void backButtonAction(ActionEvent event) throws IOException {
Stage stageTheLabelBelongs = (Stage) backButton.getScene().getWindow();
setPrevStage(stageTheLabelBelongs);
prevStage.close();
stageTheLabelBelongs.show();
}
方法 setPrevStage(Stage stage) 在两个控制器(OrderCheckController 和 PersonalController)中都实现了
public void setPrevStage(Stage stage){
this.prevStage = stage;
}
所以现在当我点击新页面上的“返回”按钮时,窗口将快速关闭并再次打开,因为什么都没发生。
【问题讨论】:
-
Juggling
Stages对于您正在尝试做的事情似乎是一种严厉的方法。您是否有理由要使用多个Stages而不是管理Nodes、Panes、Parents等的List<>? -
您看过 Oracles FX Demo and Samples 中的登录演示吗? Main 类展示了如何用不同的阶段/FXML 替换场景内容
标签: java javafx javafx-2 fxml scenebuilder