我有一个JTable,其行数不断增加(可能是无限数量)。避免高内存使用的解决方案是将内容“缓存”到文件并基于当前滚动条光标位置从该文件中检索页面/数据块。另一个“额外”问题是根据列值过滤掉这些数据。我认为这是一个已知问题并且为了避免重新发明轮子,我想知道是否有任何现成的小部件/库用于此目的。我找不到任何谷歌搜索。
答案 0 :(得分:2)
JTable
仅在需要显示该数据时从其model读取数据。只要您的模型可以管理,隐形部件(通常在将工作台放入滚动窗格时)可以非常大而不会对性能产生任何影响。
我建议在关系数据库的顶部实现模型,通过JDBC选择SQL所需的列。在最简单的情况下,任何行都可以加载为
select field1, field2, field2 .. field2 from myTable
offset row_number limit 1;
这样的陈述也是prepared statement的理想候选人。唯一可能无法正常工作的是排序,因为任何分拣机都需要查看列中的所有值来确定顺序。但是,您可以使用数据库引擎排序:
select field1, field2, field2 .. field2 from myTable
order by field1 desc
offset row_number limit 1;
如果field1
上有索引,则数据库引擎可以使用该索引而无需对列进行实际排序。
如果性能不足,可以尝试更复杂的模型,一次获取多行并使用一些缓存。然而,下降数据库可以提取很多,这可能没有必要。
答案 1 :(得分:1)
此类表格的一个示例如下:
http://www.java2s.com/Code/Java/Swing-JFC/PagingorpagableJTableTableModelforlargedataset.htm
但是,请参阅以下关于您提到的“额外问题”的接受答案中的第一个选项:
Very big JTable, RowFilter and extra load
过滤需要扫描整个数据,因此即使您不使用关键数据库(如建议的答案),也可以考虑使用一个或任何其他提供快速搜索和过滤的非SQL数据库。
答案 2 :(得分:0)
这里的Swing位有一个列过滤器: