我正在使用DefaultComboBoxModel來管理我的應用中各種JComboBox的數據。DefaultComboBoxModel和JCombobox之間的通信
我想數據正在加載或重新加載而禁用這些組合框(或顯示一個「裝載...」的文字,並設置指針沙漏)。
有沒有辦法讓JComboBox知道模型重裝數據?
重新加載發生在一個單獨的線程中。
我正在使用DefaultComboBoxModel來管理我的應用中各種JComboBox的數據。DefaultComboBoxModel和JCombobox之間的通信
我想數據正在加載或重新加載而禁用這些組合框(或顯示一個「裝載...」的文字,並設置指針沙漏)。
有沒有辦法讓JComboBox知道模型重裝數據?
重新加載發生在一個單獨的線程中。
在AbstractListModel
中有一個叫做addListDataListener(ListDataListener l)
的函數。現在你可以實現你自己的偵聽器了,當方法fireContentsChanged(Object source, int index0, int index1)
被調用時會被告知(這將在後臺完成,你不需要這樣做)。
刪除所有Listeners從結束JComboBox(es),直到刷新(一個無效)
顯示GlassPane, put there description to the JLabel(注意只消耗鼠標事件,必須覆蓋從鍵盤事件)或(better could be to use) JLayer for Java7,基於on JXLayer (Java6)
如果結束所有數據加載然後全部加上Listeners回到JComboBox(es)(一個無效)
我會用的SwingWorker爲背景的任務,我會在JComboBoxes的SwingWorker類的後臺線程運行時調用setEnabled(false)
,然後將重新啓用JComboBoxes當線程完成。這可以通過向SwingWorker添加PropertyChangeListener來監聽其狀態屬性並在StateValue.DONE時收到通知來確定。請注意,模型本身只應在Swing事件線程上更新。因此,舉例來說,如果數據是從數據庫傳入的,請從後臺線程中的數據庫中獲取信息,但將其傳遞給事件線程上的組合框模型。 SwingWorker的進程/發佈方法對是完成這個任務的好方法。
我的問題是,我的模式沒有任何引用的JComboboxes – gquiniou
然後不得不接受這樣所有監聽器添加到JComboBox時可以觸發的事件,我說的是乾淨,舒適的方式 – mKorbel