DefaultComboBoxModel和JCombobox之间的通信

时间:2012-10-19 15:26:46

标签: java swing jcombobox

我正在使用DefaultComboBoxModel来管理我应用中各种JComboBox的数据。

我想在加载或重新加载数据时禁用这些组合框(或显示“loading ...”文本并将指针设置为沙漏)。

有没有办法让JComboBox知道模型正在重新加载数据?

重新加载是在一个单独的线程中发生的。

3 个答案:

答案 0 :(得分:3)

AbstractListModel中有一个名为addListDataListener(ListDataListener l)的函数。现在,您可以实现自己的侦听器,在调用方法fireContentsChanged(Object source, int index0, int index1)时将会通知您(这将在后台完成,您不需要这样做)。

AbstractListModel

答案 1 :(得分:3)

答案 2 :(得分:3)

我会使用SwingWorker作为后台任务,我会在SwingWorker的后台线程运行时在JComboBox上调用setEnabled(false),然后在线程完成时重新启用JComboBoxes。这可以通过向SwingWorker添加一个PropertyChangeListener来监听其state属性并在StateValue.DONE时被通知来确定。请注意,模型本身应仅在Swing事件线程上更新。因此,例如,如果数据来自数据库,则从后台线程中的数据库获取信息,但将其传递给事件线程上的组​​合框模型。 SwingWorker的进程/发布方法对将是一种很好的方法。