在2个不同的动作侦听器中,当满足某些条件时,将显示一个对话框。 如果两个动作侦听器都需要显示对话框,则会同时显示2个对话框。但是我想让它们一个接一个地显示出来。
简化代码:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JOptionPane.showMessageDialog(getTopLevelAncestor(), "dialog 1");
}
});
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JOptionPane.showMessageDialog(getTopLevelAncestor(), "dialog 2");
}
});
这两个“SwingUtilities.invokeLater”调用位于不同的类中。
答案 0 :(得分:1)
创建一个跟踪它的课程;这个类将包含一个要显示的对话框队列;无论何时关闭对话框,都会显示队列中的第一个队列并从队列中删除。当另一个类需要显示一个对话框时,会立即显示该队列是否为空,或者是否插入队列中。
答案 1 :(得分:1)
这与对话框的形式有关。有关此主题http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/modality/的非常有用的文章。对话框具有不同的模态类型,具有不同的优先级。您可以通过创建优先级较低的第二个对话框来解决您的问题:
JOptionPane pane = new JOptionPane("dialog 2", JOptionPane.INFORMATION_MESSAGE);
JDialog dialog = pane.createDialog("Message");
dialog.setModalityType(Dialog.ModalityType.DOCUMENT_MODAL);
dialog.setVisible(true);
希望这会有所帮助。
答案 2 :(得分:0)
您需要invokeAndWait()
,此方法会一直等到Runnable完成。
或者在你的情况下,当第一个对话框关闭时。