JTable的使用简单的例子Word下载.docx
《JTable的使用简单的例子Word下载.docx》由会员分享,可在线阅读,更多相关《JTable的使用简单的例子Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
publicClass<
?
>
getColumnClass(intcolumnIndex);
//某一单元格在界面上是否可直接编辑,rowIndex:
行号,columnIndex:
列号,从0开始
publicbooleanisCellEditable(introwIndex,intcolumnIndex);
//具体的JTable在显示时,调用这个方法取得每一个一单元格的值
publicObjectgetValueAt(introwIndex,intcolumnIndex);
//如果表格可编辑,表格对象将调用这个方法将改变后的值反映到它的model对象中
//aValue代表修改后的值,rowIndex,columnIndex表示所在的行列索引。
publicvoidsetValueAt(ObjectaValue,introwIndex,intcolumnIndex);
//模型对象可调用这个方法为自己加入一个监听器
publicvoidaddTableModelListener(TableModelListenerl);
//移除模型对象中的监听器
publicvoidremoveTableModelListener(TableModelListenerl);
}
根据以上接口定义,我们只需要编写一个实现了TableModel的类,通过如下样例代码:
javax.swing.JTabletable=newjavax.swing.JTable();
table.setModel(new实现了TableModel接口的类);
就可以在JTable对象在显示时,就会自动调用传入的Model中的方法用以填充自己的单元格的数据。
2.TableModel实践:
首先,我们编写一个TableModel的实现类如下:
importjavax.swing.event.TableModelListener;
/**自定义的tableModel实现类*/
publicclassMyTableModelV1implementsjavax.swing.table.TableModel{
//多少行:
publicintgetRowCount(){
return10;
//多少列
publicintgetColumnCount(){
return5;
//取得列名
publicStringgetColumnName(intcolumnIndex){
return"
第"
+columnIndex+"
列名"
;
//每一列的数据类型:
我们这里显示的都是String型
getColumnClass(intcolumnIndex){
returnString.class;
//指定的单元格是否可从界面上编辑
publicbooleanisCellEditable(introwIndex,intcolumnIndex){
if(columnIndex==0){
returnfalse;
}
returntrue;
//取得指定单元格的值
publicObjectgetValueAt(introwIndex,intcolumnIndex){
returnrowIndex+"
--"
+columnIndex;
//从表格界面上改变了某个单元格的值后会调用这个方法
publicvoidsetValueAt(ObjectaValue,introwIndex,intcolumnIndex){
Strings="
Changeat:
"
+rowIndex+"
---"
newValue:
+aValue;
System.out.println(s);
//这两个接口方法暂无用
publicvoidaddTableModelListener(TableModelListenerl){}
publicvoidremoveTableModelListener(TableModelListenerl){}
}
使用这个TableModel对象的JTable将显示10行5列,每个单元格将返回getValueAt方法返回的字符串,当我们在使用它的表格界面上编辑表格数据(第一列不可编辑,Model中限定了),就会调用setValue方法将编辑过后的值打印出来。
用以显示这个Model的Jtable和界面代码如下:
//TableModel应用测试
publicclassTestJTable{
//程序入口
publicstaticvoidmain(String[]args){
javax.swing.JFramejf=newjavax.swing.JFrame("
表格测试"
);
jf.setSize(300,400);
java.awt.FlowLayoutfl=newjava.awt.FlowLayout();
jf.setLayout(fl);
//1.创建一个默认的简单表格对像:
javax.swing.JTabletable=newjavax.swing.JTable();
//2.创建我们自定义的TableModel对象
MyTableModelV1tm=newMyTableModelV1();
//3.将其设置为Table的Model
table.setModel(tm);
jf.add(table);
jf.setDefaultCloseOperation(3);
jf.setVisible(true);
要让某个JTable对象按照我们自己实现的TableModel显示数据,只需要创建我们实现的TableModel的对象:
MyTableModelV1tm=newMyTableModelV1();
然后调用JTable对象的setModel方法,传入自定义的TableModel对象即可,我们可以看到程序界面运行时如下:
3.使用JTable+TableModel展示java中的数据对象:
具体请看示例,将多个UserInfo对象列表的数据显示到JTable中,首先,我们需要编写自己的TableModel类,即实现了javax.swing.table.JtableModel接口的类,这个实现类使用装有UserInfo的List对象,负责将列表中的用户对象信息提供给Jtable对象显示:
importjava.util.List;
importjavax.swing.table.TableModel;
/**
*用以在JTable中显示UserInfo对象的TableModel实现类
*@author:
蓝杰
*/
publicclassUserInfoTableModelimplementsTableModel{
privateList<
UserInfo>
userList;
//要显示的UserInfo对象列表
//创建模型对象时,必须传入要显示的UserInfo对象列表
publicUserInfoTableModel(List<
userList){
this.userList=userList;
//得到行数:
列表中有几个UserInfo对象,就显示几行
returnuserList.size();
//得到列数,UserInfo对象的每个属性是一列,id,name,age,共3列
return3;
//指定某列的类型:
暂时都是字符串类型,
//得到指定单元格的值:
第几行,就是列表中的第几个UserInfo对象
//第几行,就是列表中的第几个UserInfo对象
UserInfouser=userList.get(rowIndex);
if(columnIndex==0){//第一列是UserInfo对象的id值
"
+user.getId();
}elseif(columnIndex==1){//第二列是name属性值
returnuser.getName();
}elseif(columnIndex==2){//第二列是age值
+user.getAge();
}else{//除非设计时逻辑错误,否则不会到这里
出错!
//界面数据有变化时,模型对象的这个方法会被调用,暂时弹出说明框
Stringinfo=rowIndex+"
行"
列的值改变:
+aValue.toString();
javax.swing.JOptionPane.showMessageDialog(null,info);
//指定某单元格是否可编辑:
第一列不可编缉,第一列是ID,是每个对象的唯一识别号
if(columnIndex!
=0){
returnfalse;
//取每一列的列名
if(columnIndex==0){//第一列是UserInfo对象的id值
序号"
姓名"
年令"
//添加和移除监听器的方法暂不用,写为空的
publicvoidremoveTableModelListener(TableModelListenerl){}
接下来,我们创建界面和JTable对象,使用我们新编写的UserInfoTableModel对象显示用户数据。
*JTable和TableModel使用示例v1
publicclassUserTableUIV1{
UserTableUIV1lu=newUserTableUIV1();
lu.setupUI();
//显示主界面
publicvoidsetupUI(){
javax.swing.JFramejf=newjavax.swing.JFrame("
JTable-TableModel示例"
jf.setSize(300,200);
//创建一个表格对象
finaljavax.swing.JTabletable=newjavax.swing.JTable();
//得到要显示的用户列表对象:
List<
userList=getUserList();
//创建我们实现的TableModel对象,创建时要传入用户列表对象
UserInfoTableModeltm=newUserInfoTableModel(userList);
//将模型设给表格
jf.add(table);
jf.setDefaultCloseOperation(3);
//模拟生成用户对象列表
privateList<
getUserList(){
uList=newArrayList();
for(inti=0;
i<
100;
i++){
UserInfouser=newUserInfo();
user.setId(i+1);
user.setAge(20+i);
user.setName("
用户"
+i);
uList.add(user);
returnuList;
OK,运行程序,看到了吗?
关于JTable和TableModel对象,一定要体会的就是“衣服”和“模特”之间的关系,呵呵;
当我们在界面上修改了JTable中的值,模型对象中的方法就会被调用。
但这个JTable看起来一点也不漂亮,表格的标题头也没显示出来,接下来,我们美化一下,现在美化JTable,与模型,即数据模型没关系,就像要改衣服,不用动模特一样:
2.JTable展示方式的美化:
1.设置表格的宽度和高度:
如下代码示例:
//设每一列的宽度
table.getColumnCount();
table.getColumnModel().getColumn(i).setPreferredWidth(40);
table.setRowHeight(20);
//设定每一列的高度
2.要显示表头:
要将Jtable放到滚动板(javax.swing.JscrollPane)上,并设定其大小:
效果图如下:
使用如下代码段,:
//将表格对象放到滚动面板对象上
javax.swing.JScrollPanescrollPane=newJScrollPane(table);
//设定表格在面板上的大小
table.setPreferredScrollableViewportSize(newDimension(200,70));
//超出大小后,JScrollPane自动出现滚动条
scrollPane.setAutoscrolls(true);
jf.add(scrollPane);
//将scrollPane对象加到界面上
3.新加列,将列设为下拉框:
代码示例:
table.addColumn(newTableColumn(3));
//创建下拉框对象,并设定其中的值
JComboBoxc=newJComboBox();
c.addItem("
长沙"
株州"
湘潭"
c.setSelectedIndex(0);
//将下拉框设为表格的单元格:
table.getColumnModel().getColumn(3).setCellEditor(newDefaultCellEditor(c));
4.表格排序:
排序要实现的功能是,当单击表头时,所在列会自动排序,代码段如下:
RowSorter<
javax.swing.table.TableModel>
sorter=newTableRowSorter<
TableModel>
(table.getModel());
table.setRowSorter(sorter);
3.JTable事件响应和项目设想
JTable事件响应是非常简单,如下代码片断所示,我们可以给表格加上一个鼠标事件监听器,当鼠标单击表格(上的某一个单元格)时,弹出单元格所在的行表和单元格中的值:
//给table加上一个鼠标事件监听器对象
table.addMouseListener(newjava.awt.event.MouseAdapter(){
publicvoidmouseClicked(MouseEvente){//仅当鼠标单击时响应
//得到选中的行列的索引值
intr=table.getSelectedRow();
intc=table.getSelectedColumn();
//得到选中的单元格的值,表格中都是字符串
Objectvalue=table.getValueAt(r,c);
Stringinfo=r+"
+c+"
列值:
+value.toString();
javax.swing.JOptionPane.showMessageDialog(null,info);
});
效果如下图示:
表格某个单元格的值被编辑后,当焦点移出时,表格会自动调用自己的模型的setValueAt方法,传入改变后的值和行列索引,这个功能也可被利用来做事件响应。
JTable和JTree是Swing界面应用中两种常用的高级组件,如果我们能将JTree和JTable的应用组合起来,完善我们的《日志管理系统》,使用JTree导航,使用JTable展示数据,如下图示:
那就是一个较为完善的系统啦.试试你的研发能力?