2010-11-30 105 views
2

在2個不同的動作偵聽器中,當滿足一些條件時將顯示一個對話框。 如果兩個動作偵聽器都需要顯示對話框,則會同時顯示2個對話框。但我希望他們一個一個地展示。使用invokeLater逐個顯示對話框

簡化的代碼:

 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」 調用是在不同的類。

+0

爲什麼在同一時間調用2個不同的ActionListens?聽起來像是一個設計問題。你應該有一個ActionListener執行多個編輯(或其他)。然後,您可以分別調用每個編輯並單獨顯示其顯示對話框。 – camickr 2010-11-30 17:04:51

回答

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); 

希望這會有所幫助。

+0

不,它也不起作用。 2個對話框同時顯示。 – 2010-11-30 09:20:38

0

您需要invokeAndWait(),此方法將等待Runnable完成。

或者在您的情況下,第一個對話框已關閉。