(swing读书笔记)JTable简介(下)
by cszhao1980
六.Row
最初,JTable没有提供任何“Row”相关的类来控制Row,与Row相关的大量操作直接坐落在JTable和TableModel中。
后来,Swing提供了TableRowSorter来协助Row排序,其继承关系如下:
JAVA help中对RowSorter的描述如下:
RowSorter 提供排序和过滤的基础。创建和安装了 RowSorter 之后,您几乎不需要直接与它交互。有关 JTable 的 RowSorter 具体实现,请参阅TableRowSorter。 RowSorter 的主要功能在于,提供两个坐标系统之间的映射关系:视图的映射关系(例如 JTable)和底层数据源(通常是模型)的映射关系。 视图调用 RowSorter 的以下方法:
因为视图大量使用了 convertRowIndexToModel、convertRowIndexToView 和 getViewRowCount 方法,所以这些方法需要很快的运行快速。 RowSorter 通过 RowSorterListener 提供更改的通知。它发送两种类型的通知:
RowSorter 实现与底层模型通常没有一对一的映射关系,但它们也可以这样做。例如,如果数据库进行排序操作,则可以通过数据库调用 toggleSortOrder (在后台线程上),并重写映射方法以返回传入的参数。 RowSorter 的具体实现需要引用一个模型,比如 TableModel 或 ListModel。JTable 和 JList 之类的视图类也将引用该模型。要避免排序依赖关系,RowSorter 实现不应该在模型上安装侦听器。而是在模型更改时,视图类调用 RowSorter。例如,如果在 TableModel 中更新了一行,则 JTable 调用 rowsUpdated。模型更改时,视图可以调用任意以下方法:modelStructureChanged、allRowsChanged、rowsInserted、rowsDeleted 和 rowsUpdated。 |
七.JTable事件
首先是三种模型事件:
(1) TableModelEvent;
单元值变化、单元被更新、表格结构变化、行被插入、删除、更新。
(2) TableColumnModelEvent;
列被插入、删除、移动,列边距发生变化,列选取发生变化
(3) ListSelectionEvent;
行选取发生变化
另外,“~CellEditor”的编辑停止、取消时,会激发ChangeEvent。
JTable不提供任何添加监听器的方法,这些监听器必须添加在模型或者CellEditor上。