JDialog模态行为

时间:2016-07-12 15:32:04

标签: java swing jdialog

我想要在无模式JDialog中显示一些信息。父类将调用dispose方法在正确的位置关闭它。这是我的代码:

    private static void waitMessage() {
    JOptionPane msg=new JOptionPane("Trying to get probes. Please wait ...",
            JOptionPane.INFORMATION_MESSAGE,JOptionPane.DEFAULT_OPTION,
            null,new Object[]{},null);
    waitDialog=msg.createDialog("Probe Scan");
    waitDialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
    waitDialog.setModalityType(ModalityType.MODELESS);
    waitDialog.setSize(300,100);
    waitDialog.setVisible(true);
}

问题是当我设置ModalityType.DOCUMENT_MODAL时,消息会按预期显示。当然JDialog阻止了我不需要的东西。

Correct Pane

但是,当我设置ModalityType.MODELESS时,我得到了这个:

Incorrect Pane

JDialog不会阻止,但消息文本不会显示。有人可以解释为什么ModalityType会弹出窗格吗? TIA。

2 个答案:

答案 0 :(得分:1)

手动添加JOptionPane作为JDialog的内容,并不适合我。

JOptionPane有一个method用于创建相关的JDialog个实例,所以最好试试这个:

waitDialog = msg.createDialog("Probe Scan");

答案 1 :(得分:0)

无法以编程方式关闭对话框的原因是您没有保留对该对话框的引用。一种方法是让waitMessage()方法返回waitDialog实例。或者你可以像@Berger建议的那样做。

另外,

waitDialog.setSize(300,100);
waitDialog.setVisible(true);
waitDialog.pack();

为什么要调用setSize()和pack()?下定决心 - 你想要它是一个特定的尺寸,还是你希望它出现在它的首选尺寸?你应该在调用setSize或pack之后调用setVisible()。

  

没有' SetDefaultCloseOperation'方法

但是有setDefaultCloseOperation方法。 (注意小写的第一个字母)