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