首页 > 解决方案 > 如何关闭一个阶段并打开另一个阶段?

问题描述

我有一个充满内容的舞台。现在我想关闭/隐藏那个阶段。我读到 close / hide 是等效的,所以我不知道该使用哪个。关闭阶段后,我将开设一个新课程并制作一个新阶段,如果有一种简单的方法可以将旧阶段发送到新课程并切换内容,我也可以使用该解决方案。

我认为“primaryStage”隐藏在“start”中,无法从“handle”到达,这就是导致问题的原因,但我不知道解决方案。

public class Main extends Application implements EventHandler<ActionEvent> {

    Button btn1, btn2;

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

    public void start(Stage primaryStage) throws Exception {

        primaryStage.setTitle("title");

        btn1 = new Button("new");
        btn2 = new Button ("continue");

        btn1.setOnAction(this);
        btn2.setOnAction(this);

        VBox vb = new VBox (btn1, btn2);
        vb.setSpacing(10);
        vb.setPadding(new Insets(20));


        BorderPane root = new BorderPane();
        root.setBottom(vb);

        Scene scene = new Scene (root, 300, 250);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    @Override
    public void handle(ActionEvent event) {

        if (event.getSource()==btn1) {
            // primaryStage.hide();
            NewClassWithStage newStage = new NewClassWithStage();

        }else if (event.getSource()==btn2) {
            // primaryStage.close();
            NewClassWithStage newStage = new NewClassWithStage();
        }
    }
}

标签: buttonjavafx

解决方案


所以我不会implements EventHandler<ActionEvent> 让一切变得更复杂你应该尝试这样的事情看看你如何仍然可以控制primaryStage如果你在开始功能仍然

public class Main extends Application {

    Button btn1, btn2;

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("title");

        btn1 = new Button("new");
        btn2 = new Button ("continue");

        btn1.setOnAction(event -> {
            primaryStage.hide();
            NewClassWithStage newStage = new NewClassWithStage();
        });
        btn2.setOnAction(event -> {
            primaryStage.show();
            NewClassWithStage newStage = new NewClassWithStage();
        });

        VBox vb = new VBox (btn1, btn2);
        vb.setSpacing(10);
        vb.setPadding(new Insets(20));


        BorderPane root = new BorderPane();
        root.setBottom(vb);

        Scene scene = new Scene (root, 300, 250);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

}

推荐阅读