【问题标题】:Java Component Maximum SizeJava 组件最大大小
【发布时间】:2012-04-03 21:48:31
【问题描述】:

我在 java 中遇到了一个相当烦人的问题。我有一个在 java 中运行一堆模拟的程序,生成了很多数据,并且都显示在“图形”对象上。我创建了一个名为“Graphs”的组件,它使用 GroupLayout 显示这些“graph”对象的长列表,并将其放置在 Jscrollpane 中。

我遇到的问题是“图表”的最后一半被切断了。组件可以达到的最大大小为 32,767,恰好与 2^15 - 1(有符号 16 位数的最大大小)相同。似乎组件大小被存储为 16 位有符号数字,而不是我最初认为的 32 位整数。

我的问题是这样的。

有没有办法改变java存储组件大小的方式,从而创建大于这个大小的组件?

如果不是,解决这个问题的最佳方法是什么?我想在一个面板上显示所有这些信息。即使我将“堆叠”“图表”组件彼此叠加,父组件最终仍会超出最大尺寸。

提前致谢。

克里斯。

【问题讨论】:

  • 这可能是一个很长的镜头,但您能否对Graph 类进行子类化并将您的成员数据类型修改为更大(BigInteger)?如果这不是一个选项,我很抱歉。

标签: java components size


【解决方案1】:

查看相关问题,Why doesn't Java support unsigned ints?

您可以通过在JListJTable 中显示图表来解决此限制。 JList/JTable 只会渲染当前可见的单元格。理想情况下,您应该将图表的值分别存储在ListModelTableModel 中,并实现相应的自定义ListCellRendererTableCellRenderer

如果您只想先进行概念验证,您可以将 Graph Components 直接推入 DefaultListModelDefaultTableModel,并使用 get*CellRendererComponent(...) 的渲染器方法返回 Graph

【讨论】:

  • 我不确定这将如何解决问题,即使所有内容都在 JList 中,它只呈现屏幕上的内容。该列表仍然必须很大并且放置在 ScrollPane 中。
  • 您似乎假设 JList/JTable 将所有单元格布置在一个巨大的面板中,然后使用视口仅显示巨大面板的一部分。幸运的是,事实并非如此。对于在视口中可见的项目 m..n,JList 使用渲染器的单个实例来“标记”或绘制这些项目。重读另一个答案后,我认为 Martijn 建议您做类似的事情,只是不使用抽象出丑陋细节的内置 API。
【解决方案2】:

我知道这种方法可能更难完成,但它会比您当前的方法更好。尝试在图表旁边添加滚动条,而不是滚动窗格。通过向滚动条添加侦听器,根据滚动条的位置动态更新 Graph 的内容。

【讨论】:

  • 这不仅仅是一张图。这是一长串图表。 :S 但这种方法可能有效 :P.
  • 为什么会有不同?
猜你喜欢
  • 2011-03-03
  • 2017-07-23
  • 2011-09-28
  • 2018-06-27
  • 1970-01-01
  • 2013-02-16
相关资源
最近更新 更多