请参阅下面的JavaFX SSCCE。从窗口的默认标题栏“X”按钮关闭主要舞台时出现打印语句。单击“关闭”按钮时不显示打印语句。当我在舞台上调用close()时,为什么不调用我的onCloseHandler?我的期望是不合理的还是JavaFX中的这个(又一个)错误?谢谢!
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
Button closeButton = new Button("Close");
closeButton.setOnAction(e -> {
primaryStage.close();
});
primaryStage.setOnCloseRequest(e -> {
System.out.println("onCloseRequest handler called!");
});
StackPane rootPane = new StackPane();
rootPane.getChildren().add(closeButton);
primaryStage.setScene(new Scene(rootPane, 300, 250));
primaryStage.show();
}
}
答案 0 :(得分:4)
正如Javadoc所述,这只会在外部请求中触发:
当有外部请求关闭此窗口时调用。
也许setOnHidden
对你有用,在两种情况下都会调用它。
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
Button closeButton = new Button("Close");
closeButton.setOnAction(e -> {
primaryStage.close();
});
primaryStage.setOnHidden(e -> {
System.out.println("stage hidden");
});
StackPane rootPane = new StackPane();
rootPane.getChildren().add(closeButton);
primaryStage.setScene(new Scene(rootPane, 300, 250));
primaryStage.show();
}
}