java - 防止从退出按钮关闭 JDialog

标签 java swing

我在 google 和 stackoverflow 上搜索了很多,它们都表明使用:

d.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);

会阻止退出按钮关闭对话框,截至目前,它不是......下面贴出相关的代码片段,似乎有问题:

if (gameArea.hitChest()) {
    JDialog d = new JDialog((JFrame) gameArea.getTopLevelAncestor(), "Dialogue", true);
    ChestLoot ch = new ChestLoot(player);
    d.add(ch);
    d.setSize(200, 100);
    d.setVisible(true);
    d.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);

    d.addWindowListener(new WindowAdapter() {

        public void windowClosing(WindowEvent we) {
            System.out.println("Don't Close!");
        }

    });

    System.out.println("Should dispose here");
    TileIcon ches = gameArea.getCurrChest();
    gameArea.removeChest(ches);
}

最佳答案

您的 JDialog 是模式对话框,因此 setVisible(true) 之后的所有内容都不会影响它。将相关代码移到setVisible(true)之前:

if (gameArea.hitChest()) {
    JDialog d = new JDialog((JFrame) gameArea.getTopLevelAncestor(), "Dialogue", true);
    ChestLoot ch = new ChestLoot(player);
    d.add(ch);
    d.setSize(200, 100);

    d.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);

    d.addWindowListener(new WindowAdapter() {

        public void windowClosing(WindowEvent we) {
            System.out.println("Don't Close!");
        }

    });

    d.setVisible(true); //code pauses here and waits for the dialog to be handled

    System.out.println("Should dispose here");
    TileIcon ches = gameArea.getCurrChest();
    gameArea.removeChest(ches);
}

当您完成所有选项的设置后,只将对话框设置为可见是一个好习惯,即使是非模态对话框也是如此。

参见 JDialog ,它是这样说的:

dialog blocks user input to other top-level windows when shown

An Overview of Dialogs 中也提到了.

关于java - 防止从退出按钮关闭 JDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20358023/

相关文章:

java - 如何使用交替来匹配正则表达式中的最长匹配项?

java - 我的 Java Swing JPanel 在两个显示器上只能拉伸(stretch)到一个显示器的大小

java - 如何防止 JXTreeTable 根节点崩溃?

java - JScrollPane 中 JList 中的 DefaultListModel,看不到 JList

java - 从子项目类路径中排除父项目依赖项

java - 有更快的 "Map"吗?

java - 自动生成JButtons的方法?

java - addMouseMotionListener 获取错误坐标的问题

java - 关于JPanel重绘的问题

java - 没有安全标志的 Cookie jboss 5.1