JTable有很多行:那里有任何可重用的解决方案吗?

时间:2013-07-07 13:54:56

标签: java swing jtable

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

3 个答案:

答案 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位有一个列过滤器:

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