gpt4 book ai didi

JavaFX Stage.close() 未调用我的 onCloseRequest() 处理程序

转载 作者:行者123 更新时间:2023-12-02 05:45:33 25 4
gpt4 key购买 nike

请参阅下面的 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();
}
}

最佳答案

Javadoc所述,这仅在外部请求时触发:

Called when there is an external request to close this Window.

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

关于JavaFX Stage.close() 未调用我的 onCloseRequest() 处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48689985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com