我正在使用 DefaultComboBoxModel 来管理我的应用程序中各种 JComboBoxes 的数据。
我想在数据加载或重新加载时禁用这些组合框(或显示“正在加载...”文本并将指针设置为沙漏)。
有没有办法通知 JComboBox 模型正在重新加载数据?
重新加载发生在一个单独的线程中。
中AbstractListModel
是一个名为 的函数addListDataListener(ListDataListener l)
。现在您可以实现自己的监听器,当方法fireContentsChanged(Object source, int index0, int index1)
被调用时会收到通知(这将在后台完成,您不需要这样做)。
从JComboBox(es)中删除所有侦听器,直到刷新结束(一个无效)
显示GlassPane,对 JLabel 进行描述(注意仅使用鼠标事件,必须覆盖键盘事件)或(更好地使用)JLayer for Java7,基于JXLayer (Java6)
如果结束所有数据加载,则将所有侦听器添加回JComboBox(es)(一个无效)
我会为后台任务使用 SwingWorker,我会setEnabled(false)
在 SwingWorker 的后台线程运行时调用 JComboBoxes,然后在线程完成时重新启用 JComboBoxes。这可以通过将 PropertyChangeListener 添加到 SwingWorker 来侦听其 state 属性并在 StateValue.DONE 时收到通知来确定。请注意,模型本身应仅在 Swing 事件线程上更新。因此,例如,如果数据来自数据库,则在后台线程中从数据库中获取信息,但将其传递给事件线程上的组合框模型。SwingWorker 的进程/发布方法对将是执行此操作的好方法。