首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何指示JComboBox正在加载值?

如何指示JComboBox正在加载值?
EN

Stack Overflow用户
提问于 2011-12-26 15:08:40
回答 3查看 591关注 0票数 6

我有一个JComboBox,它的值是通过网络检索的。

我正在寻找一种方法来向用户表明这个事实,当用户希望看到列表时,展开下拉列表,然后才会检索数据。

基本要求包括:

  1. JComboBox的下拉操作不应该锁定EDT,但是组合体的操作在有值之前不应该工作。
  2. 用户应该知道何时检索了所有数据。
  3. 指示的大小(UI不动产)应该尽可能小。

注意,直到用户希望看到组合体的值(即展开下拉列表),才会检索数据。

我用过的解决方案:

我使用了一个SwingWorker来保持UI响应。组合框使用JIDE的Overlayable与侦听工人的JIDE的InfiniteProgressPanel进行叠加。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-26 15:11:38

为了避免锁定EDT,您的数据检索应该在后台线程中进行。我会使用一个SwingWorker来查找和加载这些值,因为这样可以使用一个后台线程和其他使它非常友好的东西。我将使JComboBox启用属性false,直到加载了所有值,然后通过setEnabled(true)启用它。您将知道SwingWorker是通过它的done()方法完成的(通过重写它),或者通过向SwingWorker添加一个PropertyChangeListener,并在其状态为SwingWorker.StateValue.DONE时得到通知。

用户知道流程是否完成的一种方法是,他们将看到组合框何时重新启用。如果您想要一个更明显的指示器,您可以显示一个JProgressBar或ProgressMonitor。这可以显示在一个对话框中,如果您想保持GUI外观大部分不变。

票数 7
EN

Stack Overflow用户

发布于 2011-12-27 08:23:29

我通过添加“加载.”来实现它。项目和JComboBox周围的特殊边框。单击“单独线程”开始通过SwingUtilities.invokeAndWait添加新项。当加载完成时,“加载.”最后一项被移除。

票数 3
EN

Stack Overflow用户

发布于 2011-12-27 11:51:33

若要不强迫我的用户等待数据加载,请将鳗鱼和斯坦的答案组合在一起:-)

从包含零或一个真实值的模型开始,再加上虚拟条目"loading"

  • register a PopupMenuListener,并在其第一个menuWillBecomeVisible

  • while加载中启动加载数据的SwingWorker (可能是一个单独的数据结构,可能是一个新的模型),选择虚拟条目(和/或任何其他适合通知用户正在发生的事情),操作必须注意“什么都不做-做什么”,而

  • 则在接收到已完成的替换/将数据填充到组合体的

模型中时,听取工作人员的意见。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8636896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档