ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:267.33KB ,
资源ID:11927559      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11927559.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(JTable的使用.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

JTable的使用.docx

1、JTable的使用JTable的使用收藏目标:1. 掌握表格组件的基本用法;2. 理解数据结构与界面分离的设计原理1.JTable与TableModel 21TableModel与JTable的关系: 22.TableModel实践: 33.使用JTable+TableModel展示java中的数据对象: 42.JTable展示方式的美化: 71.设置表格的宽度和高度: 72.要显示表头: 83.新加列,将列设为下拉框: 84.表格排序: 93. JTable事件响应和项目设想 94.一个游戏:java连连看 101.需求分析: 102.编写TableModel和界面实现: 113.连连看事件

2、监听: 14总结和任务: 15不止乎方法,理关乎理念!1.JTable与TableModel1TableModel与JTable的关系:前面,我们己学会在界面上加入一个简单的JTable对象:JTable table=new JTable(3,5);这段代码即可创建一个三行五列的表格用以显示在界面上;在具体的应用中,我们肯定是要让JTable显示我们自己定义的数据,比如将上例中的UserInfo对象或UserBlog对象显示到表格中,那就必须定制JTable对象所要使用的javax.swing.table.TableModel对象,在开始前,我们先理解javax.swing.table.Tab

3、leModel和JTable之间的关系:模特与衣服之间的关系: JTable对象 简单的说,JTable只是一个界面,主要负责显示功能,但JTable对象具体显示多少行多少列,甚示每行每列中显示什么类型的数据,JTable中的单元格是否可编辑,编辑之后怎么办关于数据提供和数据操作的实现,都是由这个JTable对象的TableModel对象所负责的;反向而言,当JTable对象界面的数据被改动时,JTable会自动调用自己模型中的方法将改动反映到模型中。 说了这么多,我们来看TableModel到底是什么东东-它是一个接口定义,源码说明如下:/通过调用JTable对象的setModel方法,传入

4、实现了TableModel接口类的对象 public interface TableModel public int getRowCount();/决定表格上显示多少行 public int getColumnCount();/表格上显示多少列 /得到某一列的列名,columnIndex:列的序号,从0开始 public String getColumnName(int columnIndex); /得到某一列的数据类型,columnIndex:列的序号,从0开始 public Class getColumnClass(int columnIndex);/某一单元格在界面上是否可直接编辑,ro

5、wIndex:行号,columnIndex:列号,从0开始 public boolean isCellEditable(int rowIndex, int columnIndex); /具体的JTable在显示时,调用这个方法取得每一个一单元格的值 public Object getValueAt(int rowIndex, int columnIndex); /如果表格可编辑,表格对象将调用这个方法将改变后的值反映到它的model对象中 /aValue代表修改后的值,rowIndex,columnIndex表示所在的行列索引。public void setValueAt(Object aVa

6、lue, int rowIndex, int columnIndex); /模型对象可调用这个方法为自己加入一个监听器 public void addTableModelListener(TableModelListener l); /移除模型对象中的监听器 public void removeTableModelListener(TableModelListener l); 根据以上接口定义,我们只需要编写一个实现了TableModel的类,通过如下样例代码:javax.swing.JTable table=new javax.swing.JTable();table.setModel(ne

7、w 实现了TableModel接口的类); 就可以在JTable对象在显示时,就会自动调用传入的Model中的方法用以填充自己的单元格的数据。2.TableModel实践: 首先,我们编写一个TableModel的实现类如下:import javax.swing.event.TableModelListener;/*自定义的tableModel实现类*/public class MyTableModelV1 implements javax.swing.table.TableModel /多少行: public int getRowCount() return 10; /多少列 public

8、int getColumnCount() return 5; /取得列名 public String getColumnName(int columnIndex) return 第+columnIndex+列名; /每一列的数据类型:我们这里显示的都是String型 public Class getColumnClass(int columnIndex) return String.class; /指定的单元格是否可从界面上编辑 public boolean isCellEditable(int rowIndex, int columnIndex) if(columnIndex=0) retu

9、rn false; return true; /取得指定单元格的值 public Object getValueAt(int rowIndex, int columnIndex) return rowIndex+-+columnIndex; /从表格界面上改变了某个单元格的值后会调用这个方法 public void setValueAt(Object aValue, int rowIndex, int columnIndex) String s=Change at: +rowIndex+- +columnIndex+ newValue: +aValue; System.out.println(

10、s); /这两个接口方法暂无用 public void addTableModelListener(TableModelListener l) public void removeTableModelListener(TableModelListener l)使用这个TableModel对象的JTable将显示10行5列,每个单元格将返回getValueAt方法返回的字符串,当我们在使用它的表格界面上编辑表格数据(第一列不可编辑,Model中限定了),就会调用setValue方法将编辑过后的值打印出来。 用以显示这个Model的Jtable和界面代码如下:/TableModel应用测试publ

11、ic class TestJTable /程序入口 public static void main(String args) javax.swing.JFrame jf=new javax.swing.JFrame(表格测试); jf.setSize(300,400); java.awt.FlowLayout fl=new java.awt.FlowLayout(); jf.setLayout(fl); /1.创建一个默认的简单表格对像: javax.swing.JTable table=new javax.swing.JTable(); /2.创建我们自定义的TableModel对象 MyT

12、ableModelV1 tm=new MyTableModelV1(); /3.将其设置为Table的Model table.setModel(tm); jf.add(table); jf.setDefaultCloseOperation(3); jf.setVisible(true); 要让某个JTable对象按照我们自己实现的TableModel显示数据,只需要创建我们实现的TableModel的对象:MyTableModelV1 tm=new MyTableModelV1();然后调用JTable对象的setModel方法,传入自定义的TableModel对象即可,我们可以看到程序界面运

13、行时如下:3.使用JTable+TableModel展示java中的数据对象:具体请看示例,将多个UserInfo对象列表的数据显示到JTable中,首先,我们需要编写自己的TableModel类,即实现了javax.swing.table.JtableModel接口的类,这个实现类使用装有UserInfo的List对象,负责将列表中的用户对象信息提供给Jtable对象显示:import java.util.List;import javax.swing.event.TableModelListener;import javax.swing.table.TableModel;/* * 用以在J

14、Table中显示UserInfo对象的TableModel实现类 * author: 蓝杰 */public class UserInfoTableModel implements TableModel private List userList; /要显示的UserInfo对象列表 /创建模型对象时,必须传入要显示的UserInfo对象列表 public UserInfoTableModel(List userList) this.userList=userList; /得到行数:列表中有几个UserInfo对象,就显示几行 public int getRowCount() return u

15、serList.size(); /得到列数,UserInfo对象的每个属性是一列,id,name,age,共3列 public int getColumnCount() return 3; /指定某列的类型:暂时都是字符串类型, public Class getColumnClass(int columnIndex) return String.class; /得到指定单元格的值:第几行,就是列表中的第几个UserInfo对象 public Object getValueAt(int rowIndex, int columnIndex) / 第几行,就是列表中的第几个UserInfo对象 Us

16、erInfo user=userList.get(rowIndex); if(columnIndex=0)/第一列是UserInfo对象的id值 return +user.getId(); else if(columnIndex=1)/第二列是name属性值 return user.getName(); else if(columnIndex=2)/第二列是age值 return +user.getAge(); else/除非设计时逻辑错误,否则不会到这里 return 出错!; /界面数据有变化时,模型对象的这个方法会被调用,暂时弹出说明框 public void setValueAt(Ob

17、ject aValue, int rowIndex, int columnIndex)String info=rowIndex+行+columnIndex+列的值改变: +aValue.toString(); javax.swing.JOptionPane.showMessageDialog(null,info); /指定某单元格是否可编辑:第一列不可编缉,第一列是ID,是每个对象的唯一识别号 public boolean isCellEditable(int rowIndex, int columnIndex) if(columnIndex!=0) return true; return f

18、alse; /取每一列的列名 public String getColumnName(int columnIndex) if(columnIndex=0)/第一列是UserInfo对象的id值 return 序 号; else if(columnIndex=1)/第二列是name属性值 return 姓 名; else if(columnIndex=2)/第二列是age值 return 年 令; else/除非设计时逻辑错误,否则不会到这里 return 出错!; /添加和移除监听器的方法暂不用,写为空的 public void addTableModelListener(TableModel

19、Listener l)public void removeTableModelListener(TableModelListener l) 接下来,我们创建界面和JTable对象,使用我们新编写的UserInfoTableModel对象显示用户数据。/* * JTable和TableModel使用示例 v1 * author: 蓝杰 */public class UserTableUIV1 /程序入口 public static void main(String args) UserTableUIV1 lu=new UserTableUIV1(); lu.setupUI(); /显示主界面 p

20、ublic void setupUI()javax.swing.JFrame jf=new javax.swing.JFrame(JTable-TableModel示例); jf.setSize(300,200); java.awt.FlowLayout fl=new java.awt.FlowLayout(); jf.setLayout(fl); /创建一个表格对象 final javax.swing.JTable table=new javax.swing.JTable(); /得到要显示的用户列表对象: List userList=getUserList(); /创建我们实现的Table

21、Model对象,创建时要传入用户列表对象 UserInfoTableModel tm=new UserInfoTableModel(userList); table.setModel(tm);/将模型设给表格 jf.add(table); jf.setDefaultCloseOperation(3); jf.setVisible(true); /模拟生成用户对象列表 private List getUserList() List uList=new ArrayList(); for(int i=0;i100;i+) UserInfo user=new UserInfo(); user.setI

22、d(i+1); user.setAge(20+i); user.setName(用户+i); uList.add(user); return uList; OK,运行程序,看到了吗? 关于JTable和TableModel对象,一定要体会的就是“衣服”和“模特”之间的关系,呵呵;当我们在界面上修改了JTable中的值,模型对象中的方法就会被调用。 但这个JTable看起来一点也不漂亮,表格的标题头也没显示出来,接下来,我们美化一下,现在美化JTable,与模型,即数据模型没关系,就像要改衣服,不用动模特一样:2.JTable展示方式的美化:1.设置表格的宽度和高度:如下代码示例:/设每一列的宽

23、度 for(int i=0;itable.getColumnCount();i+) table.getColumnModel().getColumn(i).setPreferredWidth(40); table.setRowHeight(20);/设定每一列的高度2.要显示表头:要将Jtable放到滚动板(javax.swing.JscrollPane)上,并设定其大小: 效果图如下:使用如下代码段,:/将表格对象放到滚动面板对象上 javax.swing.JScrollPane scrollPane = new JScrollPane(table); /设定表格在面板上的大小table.s

24、etPreferredScrollableViewportSize(new Dimension(200, 70); /超出大小后,JScrollPane自动出现滚动条 scrollPane.setAutoscrolls(true); jf.add(scrollPane);/将scrollPane对象加到界面上3.新加列,将列设为下拉框:代码示例:table.addColumn(new TableColumn(3); /创建下拉框对象,并设定其中的值 JComboBox c = new JComboBox(); c.addItem(长沙); c.addItem(株州); c.addItem(湘潭

25、); c.setSelectedIndex(0);/将下拉框设为表格的单元格:table.getColumnModel().getColumn(3).setCellEditor(new DefaultCellEditor(c); 效果图如下:4.表格排序:排序要实现的功能是,当单击表头时,所在列会自动排序,代码段如下:RowSorter sorter = new TableRowSorter(table.getModel(); table.setRowSorter(sorter);3. JTable事件响应和项目设想JTable事件响应是非常简单,如下代码片断所示,我们可以给表格加上一个鼠标事

26、件监听器,当鼠标单击表格(上的某一个单元格)时,弹出单元格所在的行表和单元格中的值:/给table加上一个鼠标事件监听器对象 table.addMouseListener(new java.awt.event.MouseAdapter() public void mouseClicked(MouseEvent e) /仅当鼠标单击时响应 /得到选中的行列的索引值 int r= table.getSelectedRow(); int c= table.getSelectedColumn(); /得到选中的单元格的值,表格中都是字符串 Object value= table.getValueAt(

27、r, c); String info=r+行+c+列 值 : +value.toString(); javax.swing.JOptionPane.showMessageDialog(null,info); ); 效果如下图示:表格某个单元格的值被编辑后,当焦点移出时,表格会自动调用自己的模型的setValueAt方法,传入改变后的值和行列索引,这个功能也可被利用来做事件响应。JTable和JTree是Swing界面应用中两种常用的高级组件,如果我们能将JTree和JTable的应用组合起来,完善我们的日志管理系统,使用JTree导航,使用JTable展示数据,如下图示:那就是一个较为完善的系

28、统啦.试试你的研发能力?4.一个游戏:java连连看1.需求分析: 你只要玩一下一个连连看游戏,就应知道是什么需求了。所在这里不再说明 使用JTable和TableModel,再加上事件监听,可以很容易实现一个简单的连连看游戏开发,如下界面:2.编写TableModel和界面实现: 连连看要求的是,表格中显示为一个个图片,这简单,用一个二维数组,装上要显示的图标文件名,在TableModel的getValueAt方法中返回通过这个文件名创建的ImageIcon对象即可,如下代码:import javax.swing.event.TableModelListener;import javax.s

29、wing.table.TableModel;/* * 连连看表格模型的实现 * version 1.0 * author: 蓝杰 */public class LLKModel implements TableModel /对应于表格每个单元格的图标文件名 private String data; /构造器 public LLKModel() /在构造器中完成结数组的初始化:数组中为图标文件名 data=new String1212; for(int i=0;idata.length;i+) for(int t=0;tdata0.length;t+) /生成一个随机对象,随机取图片文件名字 java.util.Random ran=new java.util.Random(); int index= ran.nextInt(12)+1; /得到图片文件名字,并放入数组中 String s=image/+in

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1