
JTable的使用简单的例子.docx
10页目标:1. 掌握表格组件的基本用法;2. 理解数据结构与界面分离的设计原理1. JTable 与 TableModel 21. TableModel 与 JTable 的关系: 22. TableModel 实践: 33. 使用JTable+TableModel展示java中的数据对象: 52. JTable展示方式的美化: 81. 设置表格的宽度和高度: 82 .要显示表头: 83. 新加列,将列设为下拉框: 94. 表格排序: 93. JTable事件响应和项目设想 91・ JTable 与 TableModel1. TableModel 与 JTable 的关系:前面,我们己学会在界面上加入一个简单的JTable对象:JTable t able二new JTable(3,5);这段代码即可创建一个三行五列的表格用以显示在界面 上;在具体的应用中,我们肯定是要让JTable显示我们自己定义的数据,比如将上例中的 Userinfo对象或UserBlog对象显示到表格中,那就必须定制 JTable对象所要使用的JTable对象简单的说,JTable只是TableModel 对象javax.swing. table.TableModel 对象,在开始前,我们先理解 javax.swing.table.TableModel 和JTable之间的关系:模特与衣服之间的关系:个界面,主要负责显示功能,但JTable对象具体显示多少行多少列,甚示每行每列中显示什么类型的数据,JTable中的单元格是否可编辑,编辑之后怎么办… 关于数据提供和数据操作的实现,都是由这个JTable对象的TableModel对象所负责的;反向 而言,当JTable对象界面的数据被改动时,JTable会自动调用自己模型中的方法将改动反映 到模型中。
说了这么多,我们来看TableModel到底是什么东东一一它是一个接口定义,源码说明如下: //通过调用JTable对象的setModel方法,传入实现了 TableModel接口类的对象public interface TableModel{public int getRowCount();//决定表格上显示多少行public int getColumnCount();//表格上显示多少列//得到某一列的列名,columnindex:列的序号,从0开始public String getColumnName(int columnindex);//得到某一列的数据类型,columnindex:列的序号,从0开始 public Class〉 getColumnClass(int columnindex);//某一单元格在界面上是否可直接编辑,rowindex:行号,columnindex:列号,从0开始 public boolean isCellEditable(int rowindex, int columnindex);//具体的J Table在显示时,调用这个方法取得每一个一单元格的值public Object getValueAt(int rowindex, int columnindex);//如果表格可编辑,表格对象将调用这个方法将改变后的值反映到它的model对象中//aValue代表修改后的值,rowindex,columnindex表示所在的行列索弓I。
public void setValueAt(Object aValue, int rowindex, int columnindex);//模型对象可调用这个方法为自己加入一个监听器 public void addTableModelListener(TableModelListener l);//移除模型对象中的监听器public void removeTableModelListener(TableModelListener l);} 根据以上接口定义,我们只需要编写一个实现了 TableMode l的类,通过如下样例代码:javax.swing.JTable t able=new javax.swing.JTable();table.setModel(new 实现了 TableModel 接口的类);就可以在 JTable 对象在显示时,就会自动调用传入的 Model 中的方法用以填充自己的单元 格的数据2. TableModel 实践:首先,我们编写一个TableModel的实现类如下:import javax.sw in g.eve nt.TableModelListe ner;/**自定义的tableModel实现类*/public class MyTableModelVI implements javax.swing.table.TableModel{〃多少行:public int getRowCou nt(){return 10;}〃多少列public int getColu mnCoun t(){return 5;}〃取得列名public Stri ng getColu mnN ame(int colu mnln dex){ return "第"+columnlndex+"列名";}〃每一列的数据类型:我们这里显示的都是Stri ng型public Classv?> getColu mn Class(int colu mnln dex){ return Stri ng.class;}〃指定的单元格是否可从界面上编辑public boolean isCellEditable(int rowindex, int columnlndex){ if(colum nin dex==0){return false;}return true;}〃取得指定单元格的值public Object getValueAt(int row In dex, int colu mnin dex){ return rowl ndex+"--"+colu mnin dex;}〃从表格界面上改变了某个单元格的值后会调用这个方法public void setValueAt(Object aValue, int row In dex, int colu mnin dex){Stri ng s="Cha nge at: "+rowi ndex+"--- "+colu mnin dex+" n ewValue: "+aValue; System.out.pri ntln (s);}〃这两个接口方法暂无用public void addTableModelListener(TableModelListener l){}public void removeTableModelListener(TableModelListener l){}}使用这个 TableModel 对象的 JTable 将显示 10 行 5 列,每个单元格将返回 getValueAt 方法返 回的字符串,当我们在使用它的表格界面上编辑表格数据(第一列不可编辑‘Model中限定了), 就会调用set Value方法将编辑过后的值打印出来。
用以显示这个 Model 的 Jtable 和界面代码如下://TableMode I应用测试public class TestJTable {〃程序入口public static void main( Str in g[] args) {javax.swi ng.JFrame jf=new javax.swi ng.JFrame("表格测试");jf.setSize(300,400);java.awt.FlowLayout fl=new java.awt.FlowLayout();jf.setLayout(fl);//1.创建一个默认的简单表格对像:javax.swi ng.JTable table=new javax.swi ng.JTable();//2.创建我们自定义的TableModel对象MyTableModelV1 tm=new MyTableModelV1();//3.将其设置为Table的Model table.setModel(tm);jf.add(table);jf.setDefaultCloseOperatio n(3);jf.setVisible(true);}}要让某个JTable对象按照我们自己实现的TableModel显示数据,只需要创建我们实现的 TableModel 的对象:MyTableModelV1 tm=new MyTableModelV1();然后调用 JTable 对象的 setModel 方法,传入自定义的 TableModel 对象即可,我们可以看到 程序界面运行时如下:3. 使用JTable+TableModel展示java中的数据对象:具体请看示例,将多个Userinfo对象列表的数据显示到JTable中,首先,我们需要 编写自己的TableMode 1类,即实现了 javax.swing. table.JtableMode 1接口的类,这个实现类 使用装有 Userinfo的List 对象,负责将列表中的用户对象信息提供给 Jtable对象显示: import java.util.List;import javax.swing.event.TableModelListener;import javax.swing.table.TableModel;/***用以在J Table中显示UserInfo对象的TableModel实现类* @author:蓝杰*/ public class UserInfoTableModel implements TableModel{private List












