Note : 本实例中涉及到了Java中的Vector的使用,建议先了解Vector的使用方法, [不想看我白话的话,就直接跳到后面看代码与贴图,代码注释很详细]
我表示写这篇文章很纠结、、因为我是比较热衷于C++的,在Java方面的理解还不是那么的深刻,万一理解片面了,误人子弟了可不是一件好事、、、但是反正不管怎样,想想还是写了吧,给大家分享一下我的一些使用方法,一起共同进步才好嘛。
如果你问我Java中的JTable能干什么?那我就能告诉你 JTable绝对不仅仅只是用来存放文本数据的控件,在JTable表格控件中,数据 与 表格 是分开的,这个分开的意思就是:表格内的数据是单独存放的 与 JTable本身木有半毛钱关系,你之所以可以在表格内看到数据是因为 JTable 与数据之间存在的 一一映射的数据映射关系,就好比 房子 与人的关系一样,房子与人是相互独立的,但是有了房产证的关联于是乎房子就与人形成映射关系了。
在Java中 JTable的数据是以TableModel表模式的方式存放的,这个TableModel就是用来存放数据的,当Table初始化的时候通过TableModel获取表格的 行数、列数、列标题、以及每个单元格存放的数据(至于他们之间是怎样关联起来的这里我们不做讨论),于是当表格现实的时候就可以显示出对应的数据了。
首先,我们先来看一下 JTable的构造方法:
构造方法摘要 |
JTable() 默认的列模型和默认的选择模型对其进行初始化。 |
JTable(int numRows, int numColumns) 和 numColumns 列个空单元格的 JTable。 |
JTable(Object[][] rowData, Object[] columnNames) 构造一个 JTable 来显示二维数组 rowData 中的值, 其列名称为 columnNames。 |
JTable(TableModel dm) 和默认的选择模型对其进行初始化。 |
JTable(TableModel dm, TableColumnModel cm) 和默认的选择模型对其进行初始化。 |
JTable(TableModel dm, TableColumnModel cm, ListSelectionModel sm) 和选择模型 sm 对其进行初始化。 |
JTable(Vector rowData, Vector columnNames) rowData 中的值,其列名称为 columnNames。 |
从构造函数中我们可以看到 JTable 要么使用了默认的数据模型,要么是构造参数中传递了数据
这里我们着重看构造函数
JTable(TableModel dm)
构造一个 JTable,使用数据模型 dm、默认的列模型和默认的选择模型对其进行初始化。
在这个构造函数中,需要传递一个数据模TableModel 用来存放数据,当表格现显示的时候就直接通过这个TableModel来获取表格的信息以及数据,我们查看API可以知道 TableMode是一个接口,需要实现AbstractTableModel的方法,而AbstractTableModel又是一个抽象的类,也就是说 在使用自己的TableModel的时候要重写一个自己的TableMode类,通过这个Model来控制自己表格的数据,查看API可以知道 AbstractTableModel中有些方法是已经实现的了,所以我们只需要对自己需要的方法进行重写:
先看一下 AbstractTableModel的基本方法
int |
getColumnCount() 返回该模型中的列数。 |
String |
getColumnName(int columnIndex) 返回 columnIndex 位置的列的名称。 |
int |
getRowCount() 返回该模型中的行数。 |
Object |
getValueAt(int rowIndex,int columnIndex) 返回 columnIndex 和 rowIndex 位置的单元格值。 |
boolean |
isCellEditable(int rowIndex,int columnIndex) 如果 rowIndex 和 columnIndex 位置的单元格是可编辑的,则返回 true。就是设置当前位置的单元格的数据是否可以被编辑 |
void |
setValueAt(Object aValue, int rowIndex, int columnIndex) 将 columnIndex 和 rowIndex 位置的单元格中的值设置为 aValue。 |
看了API的一些基本的方法,这里我们就通过这些基本的 方法来写一个基本的TableModel
PS :
表格既然是一个二维的,那么表格的数据存放如果也是二维的,那么数据的一一映射就很容易实现了
我们知道Vector是一个 一维线性表,存放的数据类型是Object(Java所有类的'爹'),那么如果我们在 一维的线性表中的每个位置都放一个一维的线性表,那么 就像把很多条直线 并排放一样 就变成了一个二维的空间了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
|
//*****************************************下面是效果截图
//没有修改数据的时候
//修改了数据
PS:
上面说所的都是针对 普通的文本数据,当然JTable不仅仅是用来显示文本数据的,例如下图
本文转自悠然品鉴 小悠