我有一个JComboBox,它的值是通过网络检索的。
我正在寻找一种方法来向用户表明这个事实,当用户希望看到列表时,展开下拉列表,然后才会检索数据。
基本要求包括:
注意,直到用户希望看到组合体的值(即展开下拉列表),才会检索数据。
我用过的解决方案:
我使用了一个SwingWorker来保持UI响应。组合框使用JIDE的Overlayable与侦听工人的JIDE的InfiniteProgressPanel进行叠加。
发布于 2011-12-26 15:11:38
为了避免锁定EDT,您的数据检索应该在后台线程中进行。我会使用一个SwingWorker来查找和加载这些值,因为这样可以使用一个后台线程和其他使它非常友好的东西。我将使JComboBox启用属性false,直到加载了所有值,然后通过setEnabled(true)启用它。您将知道SwingWorker是通过它的done()方法完成的(通过重写它),或者通过向SwingWorker添加一个PropertyChangeListener,并在其状态为SwingWorker.StateValue.DONE时得到通知。
用户知道流程是否完成的一种方法是,他们将看到组合框何时重新启用。如果您想要一个更明显的指示器,您可以显示一个JProgressBar或ProgressMonitor。这可以显示在一个对话框中,如果您想保持GUI外观大部分不变。
发布于 2011-12-27 08:23:29
我通过添加“加载.”来实现它。项目和JComboBox周围的特殊边框。单击“单独线程”开始通过SwingUtilities.invokeAndWait添加新项。当加载完成时,“加载.”最后一项被移除。
发布于 2011-12-27 11:51:33
若要不强迫我的用户等待数据加载,请将鳗鱼和斯坦的答案组合在一起:-)
从包含零或一个真实值的模型开始,再加上虚拟条目"loading"
模型中时,听取工作人员的意见。
https://stackoverflow.com/questions/8636896
复制相似问题