我有一个JComboBox,其值通过网络检索。
我正在寻找一种向用户表明这一事实的方法,当用户想要查看列表时,展开下拉列表,仅正在检索数据。
基本要求包括:
请注意,在用户想要查看组合的值(即展开下拉列表)之前,不会检索数据。
我使用SwingWorker
来保持用户界面的响应能力。使用JIDE的Overlayable
和JIDE的InfiniteProgressPanel
覆盖组合框,该{J}的{{1}}会监听工作人员。
答案 0 :(得分:7)
为避免锁定EDT,您的数据检索应在后台线程中完成。我会使用SwingWorker来查找和加载值,因为这使得后台线程与其他好东西一起使得它非常易于Swing。我将使JComboBox启用属性false
,直到所有值都已加载,然后通过setEnabled(true)
启用它。您将知道SwingWorker是通过其done()
方法(通过覆盖它),或者通过向SwingWorker添加PropertyChangeListener并在其状态为SwingWorker.StateValue.DONE
时收到通知来完成的。
用户知道该过程完成的一种方法是,他们将看到重新启用组合框的时间。如果您想要一个更明显的指标,您可以显示JProgressBar或ProgressMonitor。如果您希望保持GUI外观大部分不变,可以在对话框中显示。
答案 1 :(得分:3)
我通过添加“Loading ...”项和JComboBox周围的特殊边框来实现它。点击单独的线程开始通过SwingUtilities.invokeAndWait添加新项目。加载完成后,“加载...”最后一项将被删除。
答案 2 :(得分:1)
不强迫我的用户等到数据加载,将鳗鱼和斯坦的答案结合起来: - )