使用invokeLater逐个显示对话框

时间:2010-11-30 06:44:51

标签: java swing user-interface invokelater

在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”调用位于不同的类中。

3 个答案:

答案 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完成。

或者在你的情况下,当第一个对话框关闭时。