【发布时间】:2014-12-10 15:11:47
【问题描述】:
在我的应用程序中,有一个包含大约 200 个条目的 JComboBox。使用该应用程序的人抱怨说,必须一直滚动到底部令人沮丧,即使他们确切地知道列表的最后一个元素是什么。
所以我将 JComboBox 设置为可编辑的,这样他们就可以输入最后一个元素。但是,我的数据库不接受除此组合框下拉列表中的特征之外的任何值。
有没有办法让 JComboBox 只“可输入”而不是“可编辑”,所以它可以让您输入值,但前提是它们至少匹配下拉列表中的一项?
编辑: 事实证明,上述要求的功能本身已经实现。但是,我的应用程序正在使用以某种方式禁用它的自定义代码。我无法弄清楚它发生在哪里......事实上,我根本看不到下面的代码到底在做什么。
编辑2: 我做了一些测试(花了我相当长的时间)并发现,禁用该功能的不是我的自定义代码。事实上,这是填充组合框的 ComboBoxModel 的某种错误实现,以某种方式阻止了跳跃。
我现在可以输入 c 并跳转到以 c 开头的第一个条目。 但是,我不能输入“”(空格),因为这样弹出窗口就会关闭。我找到了this 的答案,但似乎过于复杂。难道没有更简单的方法吗?
【问题讨论】:
-
JComboBox默认情况下是“可输入的”。如果您将其聚焦并开始输入,它将跳转到以您输入的内容开头的元素,尽管您输入的内容不可见。 -
@Marco7757,它可以使用 Windows、Metal 和 Nimbus,这些都是我可以在 Window 机器上发短信的 LAF。如果它不适用于 Mac、Linux 等,我会感到非常惊讶,因为这种行为应该是所有平台的标准。如果您仍有问题,请发布您的SSCCEdemonstrating 问题以及操作系统信息。您应该发布一个包含所有问题的 SSCCE,这样我们就无需猜测您在做什么。
-
@joeyrohan,“不工作”再一次没有任何意义,除非发布了
SSCCE以显示所使用的代码。如果它不起作用,那么您可能有一些用于组合框的自定义代码。这是默认功能。 -
我想知道在地球上失去默认功能可能会被视为 BetterJComboBox。另一方面,我认为问题可能出在组合框渲染器上:参见@camickr 的this post。
-
@dic19,
I think the problem could be the combo box renderer- 这也是我的猜测。我仍在等待 OP 发布正确的SSCCE,所以我们掌握了所有信息。当人们希望我们继续猜测他们的代码到底在做什么时,我感到很沮丧......