我有一个 JTable,它的行数不断增加(可能是无限的)。避免高内存使用的解决方案是将内容“缓存”到文件并根据当前滚动条光标位置从该文件中检索页面/数据块。另一个“额外”问题是根据列值过滤掉这些数据。由于我认为这是一个已知问题并且为了避免重新发明轮子,我想知道是否有任何现成的小部件/库用于此目的。我找不到任何东西只是谷歌搜索。
问问题
1566 次
3 回答
2
JTable
仅在需要显示该数据时从其模型中读取数据。不可见的部分(通常当表格被放入滚动窗格时)可以非常大而不会影响性能,只要您的模型可以管理它。
我建议在关系数据库的顶部实现模型,通过 JDBC 使用 SQL 选择所需的列。在最简单的情况下,任何行都可以加载为
select field1, field2, field2 .. field2 from myTable
offset row_number limit 1;
这样的语句也是准备好的语句的理想候选者。唯一可能无法正常工作的是排序,因为任何排序器都需要查看列中的所有值来决定顺序。但是,您可以改用数据库引擎排序:
select field1, field2, field2 .. field2 from myTable
order by field1 desc
offset row_number limit 1;
如果 上有索引field1
,则数据库引擎可以使用该索引而无需实际对列进行排序。
如果性能不够,可以尝试更复杂的模型,一次获取多行并使用一些缓存。然而,血统数据库可以拉很多,这可能不是必需的。
于 2013-07-07T17:55:36.210 回答
1
此类表的示例如下:
http://www.java2s.com/Code/Java/Swing-JFC/PagingorpagableJTableTableModelforlargedataset.htm
但是,关于您提到的“额外问题”,请参阅以下已接受答案中的第一个选项:
过滤需要扫描整个数据,因此即使您没有像那里的答案所建议的那样使用关系数据库,也可以考虑使用一个或任何其他提供快速搜索和过滤的非 sql 数据库。
于 2013-07-07T15:47:40.470 回答
0
这里的摆动位有一个列过滤器:
于 2013-07-08T06:45:00.057 回答