Java JDialog模态行为
我想在无模式JDialog中显示一条消息,其中包含一些信息。父类将调用dispose方法在正确的点关闭它。以下是我的代码: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,
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时,此窗格将更改并正确显示。这不意味着我在非模态的情况下会有一些时间问题吗?