javaGUI学习55:Swing-表格

Swing表格显示数据行与数据列,它是Swing中最复杂的组件之一。事实上,Swing提供一个单独的包(Swing. table),这个包包含表格的支持接口和类。
Swing表格由一个表格头部(它显示列头部)、表格列和单元值组成。表格还包含行和表格单元,但是行和表格单元不像头部和列那样是对象。
表格支持许多选取模式,包括行、列和单元选取。表格单元值由实现Table CellRenderer接
口的对象绘制并由实现CellEditor接口的对象进行编辑。

1、表格和滚动

必须强调有关表格和滚动的两个问题:把表格放在一个滚动窗格中的效果和Scrollable接口的JTable的实现。

2、表格模型

表格维护三种不同的模型:表格模型、表格列模型和列表选取模型。
表格模型实现TableModel接口并负责提供表格的单元值。
表格的列表选取模型负责表格行的选取;而表格列模型负责列的选取,它有自己的列表选取模型。表格列模型还维护对表格列的引用并提供添加,移动和删除列的能力。
JTable类实现ListSelection-Listener 、TableModellListener和 ‘Table-ColumnModelListener接口来监听它的模型。通过把事件发送给表格监听器来处理表格模型和表格列模型的变化。一-旦选取模型发生变化,表格的相应区域也重新绘制。

2.1 表格数据模型

JTable不存储它的单元数据。JTable的所有实例把它们的单元值交给实现TableModel接口的对象来管理。

2.2 TableModel接口

TableModel接口定义表格数据的操作方式。表格模型维护单元值,并且在单元值变化时把TableModelEvent事件发送给TableModelListener监听器。

2.3 AbstractTableModel

AhstractTableModel实现由TableModel接口定义的方法,那些返回特定数据信息的方法除外。

2.4 DefaultTableModel

DefaultTableModel扩展AbstractTableModel并实现数据操纵方法,这些方法是其超类未实现的。DefaulTableModel将单元值存储在代表行的矢量中,该矢量中的每个对象也是一个对象矢量,这些对象代表单元值。

2.5 表格模型、缺省绘制器和缺省编辑器

JTable类维护一组缺省的绘制器和缺省的编辑器,它们用于连结从getColumnClass方法返回的类,getColumnClass方法在TableModel接口中定义。例如,如果没有为一个表格列显式地指定一个绘制器,并且表格模型的geColumnClass方法返回Boolean类,那么将使用个复选框来绘制列中的值。同样,如果为列显式地指定一个编辑器,那么也用一个复选框来编辑 Boolean值。

3、表格列

Swing表格是面向列的,例如,表格数据是基于每一列来进行绘制和编辑的。面向列的进一步证据就足,table包为表格各列提供类,但表格的各行却没有。因此,表格列用TableColunn类来表示,它是Swing表格的支柱。
表格列用TableColumn类来表示。表格列不是组件,TableColumn类只简单地维护表格列的属性。
TableColumn类唯一激发的事件是属性变化事件,该事件在其关联属性修改时被激发。

3.1 列调整大小模式

当调整列的大小时,该列得到或失去的空间必须是来自或让与这个表格其他的列。JTable类提供了五种列调整大小模式,释放空间。

3.2 列宽度

通常情况,表格列并未设置成缺省的宽度。例如,的应用程序含有一个表格,它的三:个列具有相同的宽度。MI (middle initial)列比它所需要的大小宽得多,而LastName列的宽度又不足以容纳其最宽的项。

4、表格列模型

表格的列由一个实现TableColunnModcl接II的对象来维护,表格列模型可以通过JTable类来访问负责选取、添加、移动和删除长格列.
表格列模型还维护少量的属性,这些属性作为整体适用于表格列。例如,TableColumnModel. setColumnMagin()设置各列之间的边距、在给定的表格中,所有列的边距都是相同的。

4.1 DefaulTableColumnModel类

Swing 只提供了TableColumnMolel接口的一个实现:DefaultTableColumnModel类。
DefaultTableColumnModel扩展Object并实现‘TableColumnModel的接口。
DefaultTableColumnModel 将它的列保存在 Vector中并包含有ListSelectionModel 的一个实例。选取模型用于实现列选取操作、有关表和列选取。

DefaultTableColumnModel还实现PropertyChangeListener接口和ListSelectionListener接口,Property-Changel .istener接口用于响应列中属性的变化,ListSelectionListener接口用于检测列选取事件。列属性变化事件和列选取事件由TableColumnModell istener进行监听。DefaultTableColumnModel用一个boolean变量指明是否允许列选取,并用-个整数值来表示列边距。

4.2 列边距

表格列的列边距表示一行中相邻两个单元之间的间隙。当修改列边距时,De-fault’TableColumnModel把一个changeEvent事件发送给已登记的TableColumnModeListener监听器。

4.3隐藏列

表格列模型提供添加、移动和删除列的方法。

4.4 锁定左边列

表格不支持锁定它们的列,所以要提供一个水平方向上锁定左边列的影像,第二个表格(此后作为头部表格)放入滚动窗格的行头部中,且把列头部放在了滚动窗格的左上角。限制头部表格的宽度与左边列相同,且不允许头部表格中的列进行排序。最后,从初始的表格列模型中删除左边列。

#### 5、表格选取

可以用ListSelectionModel类支持的选取模式中的一种选取模式来选取表格行、列和单个单元。

6、绘制和编辑

与Swing的其他有单元的组件相比,Swing表格有单元值绘制器和编辑器(可选择)。绘制和编辑几乎总是相关的且一起出现。

6.1 使用表格单元绘制器和编辑器
6.2 DefaultTableCel类
6.4 表格格式化绘制器

DefaultTableCellRenderer类实现 public setValue方法,这个方法设置绘制器的值。
根据单元是否被选中或是有焦点来设置绘制器的边框、颜色和字体,然后从绘制器的get-TableCellRendererComponent方法中调用DefaultTableCellRenderer. setValue ()。
DefaultTableCellRenderer . setValue()提供了一个方便钩,用这个钩来格式化在表格单元中显示的数据。通过扩展DefaultTableCellRenderer并重载setValue (),可以用许多办法来修改绘制器的值。例如,图19-19所示表格的 Price列配备有一个绘制器,它重载setValue ()以便将一个Double值格式化成当前值。

6.5 单元编辑器

单元编辑器具有下面的功能:

  • 提供用于编辑单元值的个组件。
  • 当编辑取消或停止时通知 CellEditorListener
  • 确定单元是否可编辑和(或)可选取。
  • 返回一个编辑值
6.6 表格单元编辑器

注意,除提供一个组件之外,CellEditor还定义了与单元编辑器功能(列举在“单元编辑器”中)相匹配的方法。这些功能留给CellEditor 接口的扩展来完成,这些功能就是TableCellEditor和 TreeCellEditor。

6.7 实现TableCellEditor接口

因为Swing 不提供抽象编辑器类,该抽象编辑器类封装有TableCellEditor要求的一般内部处理的事物,所以实现"TableCellEditor接口比实际要困难得多。例如,用于登记单元监听器和激发事件的方法(这些方法在CellEditor中定义)本质上是样板代码,必须为直接实现TableCellFditor接口的表格单元编辑器实现这个样板代码。

7、表格行

与表格列不同,表格行的地位较低,Swing 不提供表格行的类。因此,JTable类和表格模型给出大量操作行的方法。

7.1 行高

表格的行高由JTable.setRowHe-ight方法设置。

7.2 绘制行

Swing表格的绘制器和编辑器在列的基础上被分配,然而有时在行或单元中进行绘制或编辑也是必要的。

8、表格装饰器

Java语言中,对象经常使用继承来添加其功能。例如,由一个定制绘制器将一个图标添加到表格的列头部上,这个定制绘制器扩展TableCellRenderer并根据列头部的值来显示一个图标。

9、表格头部

表格头部是显示在表格的滚动窗格视口中的组件。如果表格不包含在滚动窗格中,那么表格的头部将是不可见的。

9.1 JTableHeader
9.2 列头部绘制器和头部工具提示
9.3 表格事件
9.4 表格模型事件
9.5 TableColumnModel
9.6 列表选取事件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值