如何表明JComboBox正在加载值?

Asa*_*saf 6 java swing jcombobox event-dispatch-thread jide

我有一个JComboBox,其值通过网络检索.

我正在寻找一种向用户指示该事实的方法,当用户想要查看列表时,展开下拉列表,然后检索数据.

基本要求包括:

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

请注意,在用户想要查看组合的值(即展开下拉列表)之前,不会检索数据.

我用过的解决方案:

我使用了一个SwingWorker来保持UI响应.组合框使用JIDE's覆盖Overlayable,JIDE InfiniteProgressPanel聆听工作人员.

Hov*_*els 7

为避免锁定EDT,您的数据检索应在后台线程中完成.我会使用SwingWorker来查找和加载值,因为这使得后台线程与其他好东西一起使得它非常易于Swing.我将使JComboBox启用属性,false直到所有值都已加载,然后通过启用它setEnabled(true).您将知道SwingWorker是通过其done()方法(通过覆盖它)完成的,或者通过向SwingWorker添加PropertyChangeListener并在其状态为时通知SwingWorker.StateValue.DONE.

用户知道该过程完成的一种方式是,他们将看到重新启用组合框的时间.如果您想要一个更明显的指标,您可以显示JProgressBar或ProgressMonitor.如果您希望保持GUI外观大部分不变,则可以在对话框中显示.