JComboBox和JSpinner的区别

8
我正在编写一个Java桌面实用程序,使用Java Swing,并且其中只有一小部分是图形用户界面(GUI)部分,大部分工作都在服务器端即后端完成。因此,我不想花费太多时间学习不同的控件和小部件来完成GUI部分任务。问题在于Swing有两个控件用于(对我而言)相同的任务,即下拉菜单,它们是JComboBoxJSpinner。我不知道它们之间的区别,也不想选择其中一个并受到任何限制,这会妨碍我完成任务。
我必须使用下拉菜单来显示从数据库返回的List<String>,它可能有成千上万个值。为了避免用户滚动,我将以字母开头或某些类别限制作为输入,因此可能会使用要显示的特定值从List<String>中。我希望我的程序尽可能高效,并尽可能少地花费时间在前端,因为后端有很多操作。
非常感谢您的任何帮助。

1
从JSpinner标签wiki中:“虽然组合框提供类似的功能,但有时会更喜欢使用微调器,因为它们不需要下拉列表来遮挡重要数据。” - S.L. Barth
3个回答

4

我需要使用下拉框来显示从数据库返回的列表,其中可能有数千个值。

  • 所有上述的JComponents都是基于预期数组的,也许需要将java.util.List转换为String[]Vector(取决于代码逻辑)

  • 没有任何GUI被指定为支持成千上万的值,请查看数据库分页引擎(Paginations)

  • 上述提到的AutoComplete JComboBox / JTextField在今天的PC上最多可以处理2k行而不会出现任何问题

  • 对于从大型数组中进行搜索或选择,您可以查看Stepped JComboBox(大约是两个或更多个JComboBoxes)

    第1个用于减少选择范围,例如[0-9, A-Z]

    第2个用于搜索以A开头的记录(例如)

  • 数据库(Database)事件重定向到后台任务,并使用SwingWorkerRunnable#Thread


4
关键区别在于模型:SpinnerModel 实现创建值的 序列,而 ComboBoxModel 则不是。如果 SpinnerModel 中的对象没有合适的自然顺序,您需要强制执行一种顺序。
实际上,“成千上万个值”将从辅助方法中受益,如 @mKorbel 的 答案 所建议的那样。

2

JComboBox适合您的要求。 JComboBox适用于显示值列表。当您想要在Spinner的文本字段上执行一些功能(如增加/减少)时,可使用JSpinner。

这个Oracle教程解释了关于JSpinner及其与JComboBox的相似之处。 还有一个演示应用程序可供参考。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接