javafx.scene.control.Dialog<R> 不会在按“x”时关闭

2022-09-03 16:34:40

如果我只是创建一个从 扩展的空类,当我按下右上角的“x”按钮时,它不会关闭。javafx.scene.control.Dialog<R>

如何实现此行为?API似乎告诉我,我需要实现一个关闭按钮。但在我的情况下,我不想要关闭按钮,我只想用x按钮或按ESC关闭窗口。这可能吗?


答案 1

@eckig或@jewelsea的解决方法工作正常。但是我会使用这样的东西:

// Somewhere in code
Dialog<?> dialog = new Dialog<>();
Window    window = dialog.getDialogPane().getScene().getWindow();
window.setOnCloseRequest(event -> window.hide());

我不知道这种用途的任何限制,但它对我有用。我建议在对话框初始化后立即初始化窗口,如上所述。


答案 2

要解决此问题,可以向对话框中添加一个隐藏的关闭按钮。

import javafx.application.Application;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.stage.Stage;

public class DialogClosure extends Application{

    @Override
    public void start(Stage stage) throws Exception {
        Button openDialog = new Button("Open Dialog");
        openDialog.setOnAction(event -> {
            Dialog dialog = new Dialog();
            dialog.getDialogPane().getButtonTypes().add(ButtonType.CLOSE);
            Node closeButton = dialog.getDialogPane().lookupButton(ButtonType.CLOSE);
            closeButton.managedProperty().bind(closeButton.visibleProperty());
            closeButton.setVisible(false);
            dialog.showAndWait();
        });

        stage.setScene(new Scene(openDialog));
        stage.show();
    }
    public static void main(String[] args) {
        launch(args);
    }
}

然后,该对话框既满足了您能够通过本机窗口系统的窗口关闭图标关闭的要求,也满足了 JavaFX 对话框的要求,即在对话框中包含关闭按钮以使关闭图标正常工作。

或者,您可以将舞台与 showAndWait 一起使用,而不是对话框。没有任何包含按钮的舞台可以使用窗口系统的关闭窗口图标进行闭合。


推荐