2012-07-05 82 views
0

如果用戶還沒有關閉第一個,我想停止顯示第二個(或第n個)showConfirmDialog,但我找不到這樣做的方法。停止排隊後續的JOptionPane

+0

所以你說多個確認對話框一次顯示?你能給我們一個(簡短的)代碼示例來展示你如何給他們打電話嗎? – 2012-07-05 14:46:39

回答

1

JOptionPane.showConfirmDialog被阻止。從調用檢查返回值,以確定是否應顯示一個對話框,像這樣:

int result = JOptionPane.showConfirmDialog(frame, "First question?"); 

if (result != JOptionPane.CANCEL_OPTION) { 

    int nextResult = JOptionPane.showConfirmDialog(frame, "Next question?"); 
    ... 
} 

如果你有一份問題清單,要求您可以使用一個循環,並打破了用戶時解除對話框:

for (String question : questions) { 

    int result = JOptionPane.showConfirmDialog(frame, question); 

    if (result == JOptionPane.CANCEL_OPTION) 
     break; 

    // handle (yes/no) the response 
    .... 
} 
+0

對不起,我沒有解釋得很清楚。我有一個正在偵聽套接字上的某個文本字符串的可運行內部類。如果到達,則彈出JOptionPane.showConfirmDialog。這很好。除非發送該字符串的遠程對等方在另一端取消,然後決定再次發送該字符串,否則接收方客戶機將獲得另一個顯示的ConfirmDialog,以及我希望不允許的第二個或隨後的對話框。 – user1410059 2012-07-05 15:48:15

+0

我仍然認爲@ dacwe的答案適合您的問題。無論如何,也許你應該做套接字通信。通過添加某種ack消息更加健壯,甚至發送消息以顯示已取消的消息。 – 2012-07-05 16:13:10

+0

我已經有這樣的代碼 - 它不工作。因爲接收客戶端只是讓對話框掛在屏幕上 - 我想確保另一個不會被接受 - 我不在乎接收客戶端是否從未點擊過YE或不,我只是不要另建一個對話框。 – user1410059 2012-07-05 16:56:58

0

我建議直接使用JDialog(JOptionPane只是創建JDialog的快捷方式)。您可以使用WindowListener/windowClosing事件來確定您是否應該顯示下一個JOptionPane

+0

對不起人們 - 我的錯誤 - 在if子句中有一個錯誤的布爾值,它意味着阻止後續的消息對話。得到它排序,並感謝這一次。 – user1410059 2012-07-05 22:37:13

1

如果我正確理解您的問題(和註釋),您將有一定的Thread,它們監聽套接字上的文本,並在接收到文本時顯示新文字的新對話框。

我通過顯示一個包含JTextArea的對話框解決了類似的問題。當我的Thread收到新文本時,我將文本附加到JTextArea,並在JTextArea未顯示時顯示。

當用戶解除對話框時,我清除了JTextArea

小方面說明:您最好更新您的問題,並在評論中添加額外信息,因爲這些評論可以讓您更清楚地解決您要解決的問題。