Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JDialog模态行为_Java_Swing_Jdialog - Fatal编程技术网

Java JDialog模态行为

Java JDialog模态行为,java,swing,jdialog,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,

我想在无模式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块不是我需要的

但是,当我设置ModalityType.MODELESS时,我得到以下结果:


JDialog不会阻塞,但消息文本不会显示。有人能解释一下为什么ModalityType会在窗格中出现吗?TIA。

手动添加一个
JOptionPane
作为
JDialog
的内容,我觉得不太合适

JOptionPane
有一个设计用于创建相关的
JDialog
实例的

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

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

而且

waitDialog.setSize(300,100);
waitDialog.setVisible(true);
waitDialog.pack();
为什么要调用setSize()和pack()?下定决心-您是希望它有一个特定的尺寸,还是希望它显示为您喜欢的尺寸?您应该在调用setSize或pack之后调用setVisible()

没有“SetDefaultCloseOperation”方法


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

我在我的环境中没有看到这个问题,只是好奇:当你调整对话框的大小时,它会正确显示吗?不会。调整大小无关紧要。我从搜索中找到了这个方法。我来试试你的。谢谢。在进一步研究之后,我认为这不会满足我的需要。我看不出如何创建它,以便用户无法关闭它。没有“SetDefaultCloseOperation”方法。我也看不到如何以编程方式关闭它,因为它似乎没有“dispose”方法。我遗漏了什么吗?创建的对话框与任何其他JDialog具有相同的方法,您可以像在示例中一样调用它们,包括setDefraultCloseOperation.Hmm。不为我工作。我的IDE(Eclipse)在这些方面给了我缺少的方法错误。我现在编译了它,但得到了相同的结果。我已经更新了原来的帖子以显示新代码。我做错什么了吗?我想我已经找到问题的原因了。当此方法的父级创建带有“确定”按钮的JOptionPane时,此窗格将更改并正确显示。这不意味着我在非模态的情况下会有一些时间问题吗?