我有一个 JComboBox,它的值是通过网络检索的。
我正在寻找一种方法来向用户表明这一事实,当用户想要查看列表时,展开下拉列表,只有这样才会检索数据。 p>
基本要求包括:
- JComboBox 的下拉菜单不应锁定 EDT,但组合的操作在有值之前不应起作用。
- 用户应该知道何时检索到所有数据。
- 指示的大小(UI 空间)应尽可能小。
请注意,在用户想要查看组合的值(即展开下拉列表)之前不会检索数据。
我用过的解决方案:
我使用了 SwingWorker
来保持 UI 响应。使用 JIDE 的 Overlayable
和 JIDE 的 InfiniteProgressPanel
来覆盖组合框,后者会监听 worker。
最佳答案
为避免锁定 EDT,您的数据检索应在后台线程中完成。我会使用 SwingWorker 来查找和加载值,因为这提供了一个后台线程和其他好东西,使其对 Swing 非常友好。我将使 JComboBox 启用属性 false
直到加载所有值,然后通过 setEnabled(true)
启用它。您将知道 SwingWorker 是通过其 done()
方法(通过重写它)或通过向 SwingWorker 添加 PropertyChangeListener 并在其状态为 SwingWorker.StateValue.DONE 时收到通知来完成的
。
用户知道该过程已完成的一种方法是他们将看到组合框何时重新启用。如果您想要更明显的指示器,您可以显示 JProgressBar 或 ProgressMonitor。如果您希望 GUI 外观基本保持不变,这可以显示在对话框中。
关于java - 如何指示 JComboBox 正在加载值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8636896/