4

我想禁用 JOptionPane 左上角的关闭 x 我该怎么做?

4

4 回答 4

5

迈克尔,

我不知道如何禁用 Close[x] 按钮。或者,当用户单击它时,您什么也不做。检查下面的代码:

JOptionPane pane = new JOptionPane("message");
JDialog dialog = pane.createDialog(null, "Title");
dialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
dialog.setVisible(true);

对你来说合理吗?

于 2009-11-20T21:21:02.053 回答
2

您可以通过 JOptionPane 中声明的取消按钮覆盖退出按钮,并相应地处理取消操作:

JOptionPane optionPane= new JOptionPane("message", JOptionPane.OK_CANCEL_OPTION);

final JDialog dialog = optionPane.createDialog(null, "Input");
dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
dialog.addWindowListener(new WindowAdapter() { 
@Override public void windowClosing(WindowEvent e) { 
    optionPane.setValue(JOptionPane.CANCEL_OPTION);
}
});

if (JOptionPane.CANCEL_OPTION!= ((Integer) optionPane.getValue()).intValue())
                    throw new myCancellationException();
于 2012-09-21T10:30:22.923 回答
1

当用户尝试在不选择选项的情况下关闭它时,您总是可以再次显示该对话框。在sun.com上有一个如何覆盖默认关闭行为的示例。在“停止自动关闭对话框”下查看,它们具有以下代码:

final JOptionPane optionPane = new JOptionPane(
                "The only way to close this dialog is by\n"
                + "pressing one of the following buttons.\n"
                + "Do you understand?",
                JOptionPane.QUESTION_MESSAGE,
                JOptionPane.YES_NO_OPTION);

final JDialog dialog = new JDialog(frame, 
                             "Click a button",
                             true);
dialog.setContentPane(optionPane);
dialog.setDefaultCloseOperation(
    JDialog.DO_NOTHING_ON_CLOSE);
dialog.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent we) {
        setLabel("Thwarted user attempt to close window.");
    }
});

optionPane.addPropertyChangeListener(
    new PropertyChangeListener() {
        public void propertyChange(PropertyChangeEvent e) {
            String prop = e.getPropertyName();

            if (dialog.isVisible() 
             && (e.getSource() == optionPane)
             && (prop.equals(JOptionPane.VALUE_PROPERTY))) {
                //If you were going to check something
                //before closing the window, you'd do
                //it here.
                dialog.setVisible(false);
            }
        }
    });
dialog.pack();
dialog.setVisible(true);

int value = ((Integer)optionPane.getValue()).intValue();
if (value == JOptionPane.YES_OPTION) {
    setLabel("Good.");
} else if (value == JOptionPane.NO_OPTION) {
    setLabel("Try using the window decorations "
             + "to close the non-auto-closing dialog. "
             + "You can't!");
}

使用该代码,您可以轻松地将注释部分调整为仅在用户单击可用选项之一而不是关闭按钮时才允许关闭窗口。

于 2009-11-20T20:15:57.787 回答
0

我不确定是否有办法在JOptionPane.

通常,当人们想要比 JOptionPane 提供的更多灵活性时(它基本上是一组用于几个对话框的静态工厂),他们使用JDialog.

JDialog 提供了继承的方法setUndecorated,它完全消除X了。这是更多的工作,但你可以让你的对话框看起来像你想要的那样。

于 2009-11-20T20:09:25.397 回答