如何关闭一个阶段并打开另一个阶段?

时间:2019-06-26 18:02:48

标签: button javafx

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

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

公共类Main扩展应用程序实现EventHandler {

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

}

1 个答案:

答案 0 :(得分:1)

所以我不会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); }

}