2012-10-19 15 views
0

我正在使用DefaultComboBoxModel來管理我的應用中各種JComboBox的數據。DefaultComboBoxModel和JCombobox之間的通信

我想數據正在加載或重新加載而禁用這些組合框(或顯示一個「裝載...」的文字,並設置指針沙漏)。

有沒有辦法讓JComboBox知道模型重裝數據?

重新加載發生在一個單獨的線程中。

回答

3

AbstractListModel中有一個叫做addListDataListener(ListDataListener l)的函數。現在你可以實現你自己的偵聽器了,當方法fireContentsChanged(Object source, int index0, int index1)被調用時會被告知(這將在後臺完成,你不需要這樣做)。

AbstractListModel

3
+0

我的問題是,我的模式沒有任何引用的JComboboxes – gquiniou

+0

然後不得不接受這樣所有監聽器添加到JComboBox時可以觸發的事件,我說的是乾淨,舒適的方式 – mKorbel

3

我會用的SwingWorker爲背景的任務,我會在JComboBoxes的SwingWorker類的後臺線程運行時調用setEnabled(false),然後將重新啓用JComboBoxes當線程完成。這可以通過向SwingWorker添加PropertyChangeListener來監聽其狀態屬性並在StateValue.DONE時收到通知來確定。請注意,模型本身只應在Swing事件線程上更新。因此,舉例來說,如果數據是從數據庫傳入的,請從後臺線程中的數據庫中獲取信息,但將其傳遞給事件線程上的組​​合框模型。 SwingWorker的進程/發佈方法對是完成這個任務的好方法。