2

在 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");
            }
        });

这 2 个“SwingUtilities.invokeLater”调用位于不同的类中。

4

3 回答 3

1

开设一个跟踪该问题的课程;此类将包含要显示的对话框队列;每当关闭对话框时,队列中的第一个对话框就会显示并从队列中删除。当另一个类需要显示对话框时,如果队列为空,则立即显示,否则插入队列。

于 2010-11-30T07:56:47.443 回答
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);

希望这会有所帮助。

于 2010-11-30T08:10:24.167 回答
0

你需要invokeAndWait(),这个方法一直等到 Runnable 完成。

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

于 2011-08-05T20:43:38.983 回答