如何禁用对话框上的X?

时间:2011-03-15 18:01:28

标签: java swing jdialog

有没有办法禁用对话框上的所有X?

我可以通过以下方式完成此任务:

JOptionPane pane = new JOptionPane("Are you hungry?", JOptionPane.QUESTION_MESSAGE, JOptionPane.YES_NO_OPTION);

JDialog dialog = pane.createDialog("Title"); 
dialog.addWindowListener(new WindowAdapter() {    
public void windowClosing(WindowEvent evt) {
    } }); 
dialog.setContentPane(pane);
dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); 
dialog.pack();

但问题是我必须将其应用于其他20-40个对话框,这将耗费时间。

所以我想知道如何使用一行代码使所有对话框上的字体变大(如下所示),是否有办法实现X禁用功能。

  

UIManager.put( “OptionPane.messageFont”,   新的FontUIResource(新的   字体( “ARIAL”,Font.BOLD,30)));

4 个答案:

答案 0 :(得分:1)

JDialog方法setDefaultCloseOperation就像JFrame一样:

http://download.oracle.com/javase/6/docs/api/javax/swing/JDialog.html#setDefaultCloseOperation(int

对于所有帧都不会这样做,它只会为它所设置的实例执行此操作。如果要应用于所有对话框,则需要执行以下操作之一:

  • 每次构建对话框时都要调用它。
  • 扩展JDialog并让它为您设置默认值,然后使用该新类。
  • 创建一个工厂方法,该方法将使用此默认设置构建对话框。然后在需要新对话框时调用此方法。

答案 1 :(得分:1)

您需要添加一个windowListener,但也需要设置对话框的默认关闭操作。

    setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
    this.addWindowListener(new WindowAdapter() {
        @Override
        public void windowClosing(WindowEvent e) {
            if (someConditionIsMet) {
                dispose();
            }
        }
    });

答案 2 :(得分:0)

您应该删除它,而不是禁用控件。用户不应该看到“X”按钮,然后让它不像他们期望的那样。

请参阅:

答案 3 :(得分:0)

为什么不创建一个扩展JDialog的自定义类,在构造函数中设置所需的关闭行为?

class NoCLoseDialog extends JDialog {
  NoCloseDialog(){
    addWindowListener(new WindowAdaptor(){
      // ... Close behavior ...
    });
  }
}

Crtl + F用NoCloseDialog替换JDialog ......