JavaFX获取我的应用程序的primaryStage(主菜单)

时间:2014-04-16 19:36:47

标签: java javafx javafx-2 fxml scenebuilder

我正在尝试使用JavaFX和SceneBuilder实现一个App。

我制作了一个带有不同按钮的主菜单,每个按钮指向不同的页面。

所以例如,当我点击第一个按钮时,我希望我切换到一个新的面板然后,如果我想回到上一个面板,我只需要点击“返回” - 按钮上的我得到的第二个小组。

第一步,当我点击按钮时有一个新页面是可以的。现在的问题是实现“后退”按钮。我想点击它,并拥有前一个面板,但我没有找到解决方案。

以下是代码:

启动我的应用程序的方法(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();
}

主面板上的onAction of 1按钮示例:(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(阶段阶段)在两个控制器(OrderCheckController和PersonalController)中实现

public void setPrevStage(Stage stage){
     this.prevStage = stage;
}

所以现在当我点击新页面上的“后退”按钮时,窗口将快速关闭并再次打开,因为没有任何反复发生。

2 个答案:

答案 0 :(得分:2)

试试这样。我在我的应用程序中以这种方式引用了初级阶段。

public class JavaFXApplication extends Application {

public static Stage primaryStage;

@Override
public void start(Stage stage) {

    stage.setTitle("Hello World!");
    stage.setScene(scene);
    stage.show();

    primaryStage = stage;
}

public static void main(String[] args) {
    launch(args);
}
}

您可以使用JavaFXApplication.primaryStage

从其他控制器访问它

答案 1 :(得分:1)

如果你有像用户Sudip Saha这样的Main类,那么只需在你正在使用Back按钮的控制器中创建方法goBack()。

goBack()方法:

public void goBack() {
    BorderPane mainScreen;
    try {
        mainScreen = (BorderPane) FXMLLoader.load(JavaFXApplication.class .getResource("../javafx/main.fxml"));
        JavaFXApplication.setCenterPane(mainScreen); 
    } catch (IOException e) {
        e.printStackTrace();
    } 
}

之后,只需在Scene Builder的“后退”按钮中调用goBack()方法