2

我有一个 JTable,它的行数不断增加(可能是无限的)。避免高内存使用的解决方案是将内容“缓存”到文件并根据当前滚动条光标位置从该文件中检索页面/数据块。另一个“额外”问题是根据列值过滤掉这些数据。由于我认为这是一个已知问题并且为了避免重新发明轮子,我想知道是否有任何现成的小部件/库用于此目的。我找不到任何东西只是谷歌搜索。

4

3 回答 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

但是,关于您提到的“额外问题”,请参阅以下已接受答案中的第一个选项:

非常大的 JTable、RowFilter 和额外的负载

过滤需要扫描整个数据,因此即使您没有像那里的答案所建议的那样使用关系数据库,也可以考虑使用一个或任何其他提供快速搜索和过滤的非 sql 数据库。

于 2013-07-07T15:47:40.470 回答
0

这里的摆动位有一个列过滤器:

http://code.google.com/p/oxbow/

于 2013-07-08T06:45:00.057 回答