监听表格数据变化

终于进入到JTable的重头戏了,监听在任何Java项目中都是非常重要的,监听带来的一系列的操作也有时候非常复杂

在Excel表格中,当表格中的一个单元格的数据发生变化时,与之相关的数据也会同时发生变化,这就设计到表格监听器的知识。JTable的事件大致均针对表格内容的操作处理,包括字段内容改变、列数增加或减少、行数增加或减少、表格的结构改变等。这些事件称为TableModelEvent事件。要处理TableModelEvent事件必须实现TableModelListener,此接口定义了一个方法,即TableChanged();

接下来这个实例,主要用于创建一个表格,通过对这个表格中的某个单元格数据进行修改,使得与之相关的单元格数据反生变化。
例子如下:

    package com.acconsys.swing.chapter14;import java.awt.BorderLayout;/*** 展示如何处理TableModelEvent事件* * @author Administrator* */public class Test9 implements TableModelListener {JTable table = null;MyTable9 my = null;public Test9() {JFrame f = new JFrame();my = new MyTable9();my.addTableModelListener(this);table = new JTable(my);table.setPreferredScrollableViewportSize(new Dimension(550, 30));JScrollPane s = new JScrollPane(table);f.getContentPane().add(s, BorderLayout.CENTER);f.setTitle("表格事件处理");f.pack();f.setVisible(true);f.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}@Overridepublic void tableChanged(TableModelEvent e) {/*** 处理表格数据变化事件*/// 获取所选数据的行数int row = e.getFirstRow();// 获得此行第二列的值int grade1 = ((Integer) my.getValueAt(row, 1)).intValue();// 获取此行第3列的值int grade2 = ((Integer) my.getValueAt(row, 2)).intValue();// 将两次获得的值进行叠加int total = grade1 + grade2;// 将变化的值赋给第4列my.mySetValueAt(new Integer(total), row, 3);// 系统重新绘制表格table.repaint();}public static void main(String[] args) {new Test9();}}class MyTable9 extends AbstractTableModel {// 使用AbstractTableModel来创建表格模型Object[][] p = {{ "王鹏", new Integer(91), new Integer(1949), new Integer(1910) },{ "朱学莲", new Integer(82), new Integer(1969), new Integer(1510) },{ "梅婷", new Integer(47), new Integer(1957), new Integer(1040) },{ "赵龙", new Integer(61), new Integer(1957), new Integer(1180) },{ "李兵", new Integer(90), new Integer(1987), new Integer(1770) }, };String[] n = { "姓名", "工号", "出生年月", "薪水" };@Overridepublic int getRowCount() {return p.length;}@Overridepublic int getColumnCount() {return n.length;}@Overridepublic Object getValueAt(int row, int col) {return p[row][col];}@Overridepublic String getColumnName(int col) {return n[col];}@Overridepublic Class<?> getColumnClass(int c) {return getValueAt(0, c).getClass();}@Overridepublic boolean isCellEditable(int rowIndex, int columnIndex) {// 判断单元格是否可以编辑return true;}@Overridepublic void setValueAt(Object value, int row, int col) {p[row][col] = value;fireTableCellUpdated(row, col);}public void mySetValueAt(Object value, int row, int col) {p[row][col] = value;}}

运行结果及操作说明

刚开始的时候工号+出生年月!=薪水
当在工号或出生年月修改值,按Enter后,工号+出生年月=薪水。

swing JTable学习(七)—TableModelListener相关推荐

  1. JTable 学习一

    做Java开发也有四年的时间了,但是从来没有系统的学习过Swing的知识,最近忙里偷闲看了看Swing的相关书籍,感觉还是蛮有意思的.今天先记录一下JTable的学习经历. 为了避免重复代码,写了一个 ...

  2. STL源码剖析学习七:stack和queue

    STL源码剖析学习七:stack和queue stack是一种先进后出的数据结构,只有一个出口. 允许新增.删除.获取最顶端的元素,没有任何办法可以存取其他元素,不允许有遍历行为. 缺省情况下用deq ...

  3. 22、Java Swing JTable:表格

    表格是 Swing 新增加的组件,主要功能是把数据以二维表格的形式显示出来,并且允许用户对表格中的数据进行编辑.表格组件是最复杂的组件之一,它的表格模型功能非常强大.灵活而易于执行.由于篇幅有限,本节 ...

  4. OpenCV与图像处理学习七——传统图像分割之阈值法(固定阈值、自适应阈值、大津阈值)

    OpenCV与图像处理学习七--传统图像分割之阈值法(固定阈值.自适应阈值.大津阈值) 一.固定阈值图像分割 1.1 直方图双峰法 1.2 OpenCV中的固定阈值分割 二.自动阈值图像分割 2.1 ...

  5. PyTorch框架学习七——自定义transforms方法

    PyTorch框架学习七--自定义transforms方法 一.自定义transforms注意要素 二.自定义transforms步骤 三.自定义transforms实例:椒盐噪声 虽然前面的笔记介绍 ...

  6. Docker学习七:使用docker搭建Hadoop集群

    本博客简单分享了如何在Docker上搭建Hadoop集群,我的电脑是Ubuntu20,听同学说wsl2有些命令不对,所以建议在虚拟机里按照Ubuntu或者直接安装双系统吧 Docker学习一:Dock ...

  7. (转)MyBatis框架的学习(七)——MyBatis逆向工程自动生成代码

    http://blog.csdn.net/yerenyuan_pku/article/details/71909325 什么是逆向工程 MyBatis的一个主要的特点就是需要程序员自己编写sql,那么 ...

  8. RTKLIB专题学习(七)---精密单点定位实现初识(三)

    RTKLIB专题学习(七)-精密单点定位实现初识(三) 上两篇我们介绍了RTKLIB中精密单点定位的大致流程,今天我们对照RTKLIB学习手册,来学习相应改正公式和误差源 1.在PPP模式中 RTKL ...

  9. Swing Jtable 设置单元格不可编辑

    Swing Jtable 设置单元格是可编辑,这与SWT正好相反.提供的API也不能修改可编辑性,但可以通过重写AbstractTableModel来实现JTable 单元格不可编辑. 核心代码: c ...

  10. 【数据库】ER图进行描述某系统之学习七

    文章目录 [数据库]ER图进行描述某系统之学习七 一.前提准备 二.要求 三.分析 四.ER图 [数据库]ER图进行描述某系统之学习七 一.前提准备 二.要求 画出相应的ER图,使得可以从该ER图推导 ...

最新文章

  1. ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多)
  2. 发送延迟消息_微信延迟消息的发送方式
  3. Linux套接字聊天
  4. win7 第一次装 mysql-5.7-winx64 系列,不知道root 密码,该如何处理?
  5. linux可以http安装么,Linux 5下 http的安装
  6. 用Java语言编写的随机彩色验证码
  7. Ubuntu12.04中如何让命令行路径变短
  8. 数学建模之概率模型详解
  9. webrtc 共享屏幕延时测试
  10. 9-11-12 h5总结~文档对象模型、点击事件
  11. FloydFest 19 大赛冠军歌曲 Roll With Me,使用Peluso话筒录制
  12. 储户诉银行虚假宣传 微众银行智能存款产品屡遭用户投诉
  13. 硬核科普:一片晶圆可以生产多少芯片?
  14. 大学物理(Ⅱ)公式整理
  15. c语言输出成绩与排名,C语言算成绩 要求输完两个分数后 同时输出两个分数换算出来的成绩...
  16. Win10系统中耳机插入前后面板均没有声音
  17. 用计算机亩换算成平方,公倾,平方米,英亩,市亩,平方公里等常见面积单位转换在线计算器_三贝计算网_23bei.com...
  18. c++日志工具之——log4cplus
  19. 数据库常用的操作命令
  20. 串的置换操作Replace(S,T,V)的算法

热门文章

  1. (10)进程---Manager数据共享
  2. js获取baseurl
  3. Vanya and Triangles 暴力枚举
  4. 【FIR.im赞助】jQuery编程挑战#012:生成菜单添加和删除动画效果
  5. HDOJ 1251 HDU 1251 统计难题 ACM 1251 IN HDU
  6. java基础杂谈(二)
  7. SpringCloud Stream操作消息队列
  8. 数据结构与算法之优先队列
  9. Sql分页存储过程(支持多表分页存储)
  10. Python Pycharm创建虚拟环境