【问题标题】:Do JComboBoxes have a maximum number of fields?JComboBoxes 有最大数量的字段吗?
【发布时间】:2015-10-27 07:52:17
【问题描述】:

我浏览了文档,但找不到答案......显然,如果字段数量变得太多,使用 JComboBox 变得不切实际,但理论上,JComboBoxes 有最大字段数?

【问题讨论】:

  • 你为什么不试试呢?创建一个循环并不断添加选项
  • setSelectedIndex(...) 之类的方法以什么为参数?
  • @camickr 好点,然后可以假设限制为 INTEGER.MAX_VALUE...

标签: java swing jcombobox


【解决方案1】:

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

【讨论】:

  • 是的,有限制,看我的评论。在达到这个限制之前,组合框是不切实际的。
  • 我不同意,您引用的方法是在 (n) 的索引内设置。这意味着索引计数与组合框中的数量一样多。除非我误解了每个索引是否有限制的问题。
  • 问题是“你可以在一个组合框中添加多少项目”?如果您不喜欢我的第一个示例方法,那么 getItemAt(...) 方法怎么样?因此,“理论”限制由您可以用来直接访问项目的最大索引控制。
  • 理论限制可能比 INTEGER.MAX_VALUE 小得多,具体取决于 UI 绘制列表的方式。如果它就像滚动窗口中的 JList,则第 n 项的 Y 位置必须适合 int,导致最大值为 (INTEGER.MAX_VALUE / fontHeight)
  • Java 通过 API 和“int”值的定义来实现。正如 FredK 所提到的,由于在滚动窗格中呈现组件的限制,限制会更小。
【解决方案2】:

setSelectedIndex(...)getItemAt(...) 这样的方法将int 变量作为参数。这表明 ComboBoxModel 可以支持 INTEGER.MAX_VALUE 项的“理论上”最大值。

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

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

因此,使用标准 Swing 组件的更合理的“理论”最大值将是 INTEGER.MAX_VALUE/render-row-height。

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

我不知道“理论上”的最大项目数是否还有其他限制。

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

【讨论】:

    【解决方案3】:

    根据@camickr 给你的答案,我创建了一个具有Java 中最高整数值的数组(INTEGER.MAX_VALUE,即 2147483647),然后在等待十秒钟后,程序向我抛出了 Requested数组大小超出 VM 限制 错误。根据 plumbr.io 的说法,这意味着:

    Java 对程序的最大数组大小有限制 分配。确切的限制是特定于平台的,但通常是 大约在 1 到 21 亿个元素之间。

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多