设想:
您正在使用带有自定义 TableModel 的 JTable 来查看位于数据库或网络或其他位置的某些集合的内容。
完成这项工作的强力方法是立即加载整个集合。假设由于所需资源的原因,这是不切实际的。
解决该问题的简单方法是在 JTable 呈现每一行时按需获取行,一次一行,并调用 TableModel.getValueAt();根据需要缓存。但这会导致数据库受到大量点击。
有没有办法监听 JTable 的滚动/视口事件,以确定在渲染每个单元格之前它将显示哪些行?如果是这样,我想拦截并导致我的自定义 TableModel 一次预取一页。
edit:只是为了澄清一下,这里的重点是能够批量获取一组可见表行的内容,而不是必须单独获取每一行的内容。
看一眼http://www.javaworld.com/javaworld/javatips/jw-javatip137.html http://www.javaworld.com/javaworld/javatips/jw-javatip137.html文章。在本文中,有一个自定义 TableModel,它能够从数据库中检索行的“块”
该场景的另一种解决方案虽然不完全是您正在寻找的,但它是延迟加载每一行而不是预取。请参阅我自己的帖子(在 google 中搜索“JTable 绑定到具有延迟加载的数据库”)了解如何执行此操作。这个想法是,当表模型被请求未缓存/加载的行时,它将为每列返回“wait..retriving”字符串(假设所有列都是字符串)。同时它将在另一个线程中安排任务(使用 ExecutorService)。然后该任务将从数据库中检索数据并更新数据模型。在我的文章中,我实际上使用了 Beans 绑定,因此使用自定义列表而不是自定义表模型。但我相信你可以推断出这个想法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)