1

有没有办法禁用对话框上的所有 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", new FontUIResource(new Font("ARIAL",Font.BOLD,30)));

4

4 回答 4

1

JDialog方法setDefaultCloseOperation就像 JFrame 的一样工作:

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

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

  • 每次构建对话框时调用它。
  • 扩展 JDialog 并让它为您设置默认值,然后使用该新类。
  • 创建一个工厂方法,该方法将使用此默认设置构建一个对话框。然后在需要新对话框时调用此方法。
于 2011-03-15T18:05:56.867 回答
1

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

    setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
    this.addWindowListener(new WindowAdapter() {
        @Override
        public void windowClosing(WindowEvent e) {
            if (someConditionIsMet) {
                dispose();
            }
        }
    });
于 2015-11-07T16:53:12.687 回答
0

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

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

Crtl+F 将 JDialog 替换为 NoCloseDialog ...

于 2013-12-06T16:17:07.157 回答
0

与其禁用控件,不如删除它。用户不应该看到“X”按钮,然后让它的行为不像他们预期的那样。

看:

于 2011-03-15T18:13:55.993 回答