首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >javafx.scene.control.Dialog<R>不会关闭按下"x“

javafx.scene.control.Dialog<R>不会关闭按下"x“
EN

Stack Overflow用户
提问于 2015-08-17 10:41:27
回答 5查看 17.2K关注 0票数 14

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

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-08-17 19:47:48

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

代码语言:javascript
运行
复制
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的舞台,而不是对话框。使用窗口系统的关闭窗口图标,没有任何包含按钮的舞台是可以关闭的。

票数 15
EN

Stack Overflow用户

发布于 2016-03-28 12:22:30

“eckig”或“珠宝油”的解决办法很好。但我会用这样的方法:

代码语言:javascript
运行
复制
// Somewhere in code
Dialog<?> dialog = new Dialog<>();
Window    window = dialog.getDialogPane().getScene().getWindow();
window.setOnCloseRequest(event -> window.hide());

我不知道这种使用有什么限制,但它对我起了作用。我建议在对话框初始化后立即初始化窗口,如上面所示。

票数 26
EN

Stack Overflow用户

发布于 2015-08-17 11:05:42

引用Api文档

JavaFX对话框只能在以下两种情况下关闭“异常”(如上文所定义的):

  1. 当对话框只有一个按钮时,或者
  2. 当对话框有多个按钮时,只要其中一个按钮满足以下要求之一:
代码语言:javascript
运行
复制
1. The button has a ButtonType whose ButtonData is of type ButtonData.CANCEL\_CLOSE.
2. The button has a ButtonType whose ButtonData returns true when ButtonData.isCancelButton() is called.

..。

因此,可以添加至少一个按钮或多个按钮,其中一个是ButtonData.CANCEL_CLOSE类型的按钮,例如:

代码语言:javascript
运行
复制
Dialog<ButtonType> dialog = new Dialog<>();
dialog.getDialogPane().getButtonTypes().add(new ButtonType("Got it!", ButtonData.CANCEL_CLOSE));
dialog.setContentText("test");
dialog.showAndWait();

编辑:

这个行为是在javafx.scene.control.FXDialog.requestPermissionToClose(Dialog<?>)中实现的,但是真正显示的FXDialogHeavyweightDialog,它不是公共API,所以不是真正的扩展点。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32048348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档