java快速替代JComboBox/BasicComboxUI?
我有一个JComboBox
可能有数千个项目。它们被分类了,并且在你输入的时候有find,所以原则上它不是完全不可用的
实际上,只有几百件物品是无法使用的。我使用setPrototypeDisplayValue()
设法提高了初始显示性能,但是BasicListUI
仍然坚持为框中的每个项目配置列表单元格呈现器(请参见BasicListUI.updateLayoutState()
)
这个,或者类似的东西,显然是对太阳的一个known issue;这已经持续了八年了,所以我不会屏息以待
除了实现我自己的UI之外,还有人有解决办法吗
# 1 楼答案
这是我想出的方法。缺点是:
BasicComboBoxUI
扩展子类WindowsComboBoxUI
的子类不会在Linux上加载BasicComboBoxUI
ListCellRenderer
做出的假设可能并不总是合理的我仍然对更清洁的解决方案持开放态度
我仍然对更清洁的解决方案持开放态度
以后
事实证明,这只解决了部分问题。包含大量项目的组合框的初始显示可能仍然非常慢。我必须确保弹出列表框立即获得固定的单元格大小,方法是将代码移动到
ComboPopup
本身,如下所示。请注意,如上所述,这取决于原型值# 2 楼答案
^{} 可能是一个更好的选择,因为它使用了轻量级的渲染方法,并且似乎支持在键入时查找
如果使用^{} ,在组件本身开始监听之前,向模型添加条目。这个
SortedComboBoxModel
使用了一个简单的insertion sort,可以接受几千个条目: