2

2 つの異なるアクション リスナーで、いくつかの条件が満たされたときにダイアログが表示されます。両方のアクション リスナーがダイアログを表示する必要がある場合、2 つのダイアログが同時に表示されます。しかし、私はそれらを1つずつ表示したいと思います。

簡略化されたコード:

        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/があります。ダイアログには、優先度の異なるさまざまなモダリティ タイプがあります。優先度の低い 2 番目のダイアログを作成することで、問題を解決できます。

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 に答える