2012-08-15 53 views
1

我正在處理遍歷每次通過的對象列表的程序。當一個對象的「時間」(即通過次數)達到時,它會調出一個JDialog來請求它的下一個任務。問題是如何處理一次傳遞這個請求的多個對象。想要一個JDialog爲「模態」,但不阻止其他窗口

如果我製作JDialog模態,每個對象依次發出請求,這就是我想要的;但主程序窗口不可用,我不想要。

如果JDialog不是模態的,會出現多個實例,每個實例都有一個實例,我不想要;或者,如果我將它設置爲單例,則只會出現一個實例,但只有列表中的最後一個對象纔會使用該請求。

有沒有辦法讓我彈出對話框,讓其他窗口可供用戶使用,並讓其他對象等待輪到他們使用對話框?

+1

看起來你需要某種排隊。如果您發佈了一些代碼,它可能會有所幫助。 – 2012-08-15 22:57:47

+0

亞倫,這些物體已經排成一隊了。我只是不知道如何讓他們等到JDialog關閉/隱藏之後才能推進隊列。 – 2012-08-15 23:42:13

+1

使用如上所述的隊列和WindowListener。 – 2012-08-16 00:08:22

回答

2

正如評論中指出的那樣,可以通過更改Window的父modality來解決問題。缺點是,「行爲是依賴於實現的」。作爲替代方案,考慮遍歷SwingWorker的後臺線程中的對象,並向合適的組件添加新的候選項,例如,將新的候選項添加到合適的組件。 JListJTableJTabbedPane。從組件中選擇一個元素會產生一個常規的模態對話框,完成時刪除該元素。相關示例顯示爲here。每個建議的組件都可以用代表其狀態的圖標來標記。

0

通過將原始窗口的ModalExclusionType設置爲「應用程序」並在完成後切換回「不排除」來解決此問題。

相關問題