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

标签 java javafx javafx-2 fxml scenebuilder

我正在尝试使用 JavaFX 和 SceneBuilder 实现一个应用程序。

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

例如,当我单击第一个按钮时,我希望切换到一个新面板,然后,如果我想返回到上一个面板,我只需单击“后退”按钮即可我得到的第二 block 面板。

第一步,当我点击按钮时有一个新页面,这是可以的。现在的问题是如何实现“后退”按钮。我想单击它,并获得上一个面板,但我找不到解决方案。

这是代码:

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

单击该按钮时在新 View 中实现后退按钮的示例 (PersonalController.java):

public void backButtonAction(ActionEvent event) throws IOException {
    Stage stageTheLabelBelongs = (Stage) backButton.getScene().getWindow();
    setPrevStage(stageTheLabelBelongs);
    prevStage.close();
    stageTheLabelBelongs.show();
 }

方法 setPrevStage(Stage stage) 在两个 Controller (OrderCheckController 和 PersonalController)中均实现

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

现在,当我单击新页面上的“后退”按钮时,窗口将快速关闭并再次打开,就像什么都没有发生一样。

最佳答案

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

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);
}
}

并且从其他 Controller 中,您可以使用 JavaFXApplication.primaryStage 访问它

关于JavaFX 获取我的应用程序的 PrimaryStage(主菜单),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23118620/

相关文章:

css - 如何在 Javafx 中将 CSS 用于图表栏颜色

java - 无法在 Javafx 2.0 上实例化 Path() 类

java - 如何使用字符串引用类中的公共(public) int

java - 在 IntelliJ 10.5 中运行测试时获取 "NoSuchMethodError: org.hamcrest.Matcher.describeMismatch"

java - 插入记录时触发器无效且重新验证失败错误

java - 如何根据 JavaFX 中的条件设置 ListView 单元格的样式

ssl - javafx 16 Web 引擎异常 "SSL Handshake failed"

javafx-2 - JavaFX 2.1 : Toolkit not initialized

maven项目中的javafx应用

java - 如何在扩展Application类的类中的静态方法中调用getApplicationContext?