(swing读书笔记)JTable简介(下)

来源:互联网 发布:迅雷校园招聘java笔试 编辑:程序博客网 时间:2024/05/21 13:54

(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 的以下方法:

  • toggleSortOrder — 当发生了触发排序操作的恰当用户行为时,视图调用此方法。例如,用户在表中单击列标题时。
  • 其中一个模型更改方法 — 当底层模型发生了更改时,视图调用一个模型更改方法。由于在如何交付事件方面可能存在顺序依赖关系,因此在调用这些方法之一之前 RowSorter 不应该更新其映射关系。

因为视图大量使用了 convertRowIndexToModel、convertRowIndexToView 和 getViewRowCount 方法,所以这些方法需要很快的运行快速。

RowSorter 通过 RowSorterListener 提供更改的通知。它发送两种类型的通知:

  • RowSorterEvent.Type.SORT_ORDER_CHANGED — 通知侦听器排序顺序发生了更改。此通知通常后跟一个通知,表示排序发生了更改。
  • RowSorterEvent.Type.SORTED — 通知侦听器由 RowSorter 维护的映射关系已经以某种方式发生了更改。

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上。