场景:懒惰实例化的JTable + TableModel缓存提取事件?
您正在使用带有自定义TableModel的JTable来查看位于数据库或网络中某些集合的内容或其他内容。
使这项工作的蛮力方法是一次加载整个集合。假设这是不切实际的,因为需要资源。
解决这个问题的简单方法是随着JTable呈现每一行,按需提取行,每次一行,并调用TableModel.getValueAt();必要时缓存。不过,这会导致数据库命中很多。
是否有一种方法来侦听JTable的滚动/视口事件,找出它在呈现每个单元格之前要显示的行?如果是这样,我想拦截并导致我的自定义TableModel一次预取一页。
编辑:我只想澄清,这里的关键是要能够在一个批次中获取一组可见表行的内容,而不是通过自身获取的每一行的内容。
为了保持模型视图为1-n关系,我认为最好不要查询视口,而只需要依靠在模型上执行的实际请求。自己检查视口不会更快。对于没有填充的单元格返回'null'是没有问题的,因为当你的实际批量数据来自后端时,你可以生成tableRow事件。并且jtable将再次刷新。 您可以在每个model.getValue()请求中重置一个计时器。一旦定时器激活(比如说10ms),就可以检索在一个批量请求中查询的记录。 – Houtman 2009-09-16 07:04:31