有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在尝试用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阶段)方法在两个控制器(OrderCheckController和PersonalController)中都实现

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

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


共 (2) 个答案

  1. # 1 楼答案

    如果您有像用户Sudip Saha这样的主类,那么只需在使用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();
        } 
    }
    

    之后,只需在场景生成器的“后退”按钮中调用goBack()方法

  2. # 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访问它