我在java中遇到了一个相当恼人的问题。我有一个程序在java中运行一堆模拟,生成了大量数据,它们都显示在“图形”对象上。我创建了一个名为“Graphs”的组件,它使用GroupLayout显示这些“图形”对象的长列表,并将其放在Jscrollpane中。
我遇到的问题是“图形”的结束一半被切断了。组件可以达到的最大大小为32,767,这恰好与2 ^ 15 - 1(有符号16位数的最大大小)相同。看起来组件大小存储为16位有符号数,而不是我想到的32位整数。
我的问题是。
有没有办法改变java存储组件大小的方式,从而创建大于这个大小的组件?
如果不是解决这个问题的最佳方法是什么?我想在一个面板上显示所有这些信息。即使我将“图形”组件“叠加”在一起,父组件仍然会超出最大大小。
提前致谢。
克里斯。
答案 0 :(得分:2)
请参阅相关问题Why doesn't Java support unsigned ints?。
您可以通过JList
或JTable
显示图表来解决此限制。 JList
/ JTable
只会呈现当前可见的单元格。理想情况下,您应该分别在ListModel
或TableModel
中存储图表的值,并实施相应的自定义ListCellRenderer
或TableCellRenderer
。
如果您只想先了解概念验证,可以将图表 Component
直接推送到DefaultListModel
或DefaultTableModel
,并使用一个渲染器,其get*CellRendererComponent(...)
方法返回 Graph 。
答案 1 :(得分:1)
我知道这种方法可能有点难以实现,但它会比你的方法更好。尝试在图表旁边添加滚动条,而不是滚动窗格。通过向滚动条添加侦听器,根据滚动条的位置动态更新Graph的内容。