【发布时间】:2009-09-04 17:53:51
【问题描述】:
场景:
您正在使用带有自定义 TableModel 的 JTable 来查看位于数据库或网络或其他任何地方的某个集合的内容。
完成这项工作的蛮力方法是一次加载整个集合。假设这不切实际,因为需要资源。
解决该问题的简单方法是按需获取行,一次一行,因为 JTable 呈现每一行,并调用 TableModel.getValueAt();根据需要缓存。但是,这会导致对数据库的大量点击。
有没有办法监听 JTable 的滚动/视口事件,以确定在呈现每个单元格之前它将显示哪些行?如果是这样,我想拦截并导致我的自定义 TableModel 一次预取一页。
编辑: 澄清一下,这里的重点是能够一次获取一组可见表行的内容,而不是必须自己获取每一行的内容.
【问题讨论】:
-
为了保持模型视图为 1-n 关系,我认为最好不要查询视口,而只依赖模型上执行的实际请求。自己检查视口不会更快。为未填充的单元格返回“null”是没有问题的,因为当您的实际大量数据来自后端时,您可以只生成 tableRow 事件。 jtable 将再次刷新。您可以在每个 model.getValue() 请求时重置一个计时器。并且一旦定时器触发(比如 10 毫秒),检索在一个批量请求中查询的记录。
标签: swing caching jtable tablemodel