如何启用 JTable 图标和行为以按列对表行进行排序,而不让它使用比较谓词进行排序?也就是说,如何告诉表头在正在使用的列中显示升序/降序排序的箭头,并在排序顺序/列更改时让它调用适当的方法?
我正在尝试创建一个由 SQL 查询或视图支持的(可编辑、可过滤、可排序的)JTable。这些行可能不适合内存,并且可能无法干净地映射到 java 对象,所以我想在 SQL 中进行所有排序/过滤。我已经编写了用于更改查询以适应按列排序、按值过滤和可见列的代码。
TYPE_SCROLL_SENSITIVE,
为了使用它,我计划使用and编写基于 ResultSet 的 JTableModel CONCUR_UPDATABLE
,因此对 DB 的更改会传播到 ResultSet。我将定期(每秒几次)强制刷新 ResultSet 中的可见 JTable,因此对数据库的更改对用户可见。用户对表的更改将在验证后传递给可更新的 ResultSet。
我已经稍微了解了排序是如何正常进行的,但大多数实现似乎都依赖于 JTable 创建一个带有 Comparator 谓词的 javax.swing.RowSorter,或者依赖于维护一个在更改时触发事件的排序行列表。所以,我的问题:
ORM 框架不是这个问题的答案,因为数据不能很好地映射到实体对象。另外,我使用的 DBMS 是 H2。
编辑:不幸的是,基于应用比较器或对行对象排序谓词的可排序 JTable 库也不合适。我不相信我能够将所有对象保存在内存中以执行排序。这个问题使我无法使用 SwingX JXTables、GlazedLists 或类似的库。我希望我能,但我不能。时期。
** 我将处理数千行,可能是数百万行,以及许多列。是的,我确实需要使用 SQL 来进行排序和过滤。**
问题:(按重要性递减)
- 如何显示用于对行进行排序的列的指标?
- 当左键单击列标题以更改排序顺序时,如何让 JTable 触发适当的事件?
- 有没有更简单的方法可以在数据库更改时强制 JTable 更新?
- 是否有一个库可以使这一切变得相当容易(连接数据库查询或视图和 JTables)?
- 当我设计这样的系统时,我会遇到可怕的、可怕的问题吗?