JComboBoxes 是否有最大字段数?

Do JComboBoxes have a maximum number of fields?

我查看了文档,但找不到答案...显然,如果字段数太高,使用 JComboBox 变得不切实际,但理论上,这样做是一样的JComboBoxes 有最大字段数?

据我所知,正如您所说,如果您最终不得不滚动太多,使用其他界面工具可能会更有用。我的理由是因为您可以动态填充它,这需要与您的数据一样灵活。

setSelectedIndex(...)getItemAt(...) 等方法将 int 变量作为参数。这表示 ComboBoxModel 可以支持 "theoretical" 最多 INTEGER.MAX_VALUE 项。

但是,项目还必须呈现并最终显示在 JScrollPane 中。滚动窗格和垂直 JScrollBar 也使用 int 变量来指定滚动条的像素位置。

因此您还必须考虑滚动窗格中每个渲染项目的高度。

因此,使用标准 Swing 组件更合理的 "theoretical" 最大值是 INTEGER.MAX_VALUE / 渲染行高。

但是,我想您可以创建一个自定义滚动窗格,它只显示块中的项目。因此,当您滚动到一个块的末尾时,您会预加载下一个块。从理论上讲,这将允许您在组合框中显示所有 INTEGER.MAX_VALUE 项。

我不知道 "theoretical" 项目的最大数量是否有任何其他限制。

无论如何,我相信我们都同意组合框在达到 "theoretical" 最大值之前就无法使用。

根据@camickr 给你的答案,我创建了一个数组,其中整数值在 java(INTEGER.MAX_VALUE,即 2147483647)中,然后在等待十秒钟后程序抛出了我Requested array size exceeds VM limim 错误。根据 plumbr.io 这意味着:

Java has got a limit on the maximum array size your program can allocate. The exact limit is platform-specific but is generally somewhere between 1 and 2.1 billion elements.

然后我决定尝试只使用 1.800.000 个元素并且成功了,它持续了大约 10 秒,当我单击组合框时它花了大约 5 秒来加载所有元素,但它没有问题。