表格模型的监听 TableModelListener
当表格内容发生改变,监听做了哪些操作,需要表格模型的监听 TableModelListener来实现。
以上一个随笔内容《高级组件——表格模型TableModel》为例,增加监听事件内容。具体如下

import javax.swing.*;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; public class Demo extends JFrame {//窗体类
private DefaultTableModel model;//表格模型
private JTable table;//表格
private JButton addButton, delButton, updButton;//增删改三个按钮
private JTextField aTextField, bTextField;//按钮旁边的输入框 public Demo() {//窗体构造方法
setTitle("表格模型");
setBounds(100, 100, 400, 200);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); String[] columnNames = {"A", "B"};//定义表格列名
String[][] tableValues = {{"A1", "B1"}, {"A2", "B2"}, {"A3", "B3"}};//表格内容 model = new DefaultTableModel(tableValues, columnNames);//设置模型
table = new JTable(model);//引用模型,或table.setModel(model);
JScrollPane sc = new JScrollPane(table);
getContentPane().add(sc, BorderLayout.CENTER); buttonInit();//调用按钮,按钮初始化
addMyListener();//组件的监听事件
} private void buttonInit() {
final JPanel panel = new JPanel();//内部默认流布局
getContentPane().add(panel, BorderLayout.SOUTH);
panel.add(new JLabel("A:"));
aTextField = new JTextField("A4", 5);//文本框的内容和宽度
panel.add(aTextField);
panel.add(new Label("B:"));
bTextField = new JTextField("B4", 5);
panel.add(bTextField);
addButton = new JButton("增加");
delButton = new JButton("删除");
updButton = new JButton("修改");
panel.add(addButton);
panel.add(delButton);
panel.add(updButton);
} private void addMyListener() {
addButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String rowData[] = {aTextField.getText(), bTextField.getText()};
model.addRow(rowData);//在表格模型中增加一行内容(文本框内容)
int rowCount = table.getRowCount() + 1;//获取当前行数+1
aTextField.setText("A" + rowCount);//文本框中内容增1
bTextField.setText("B" + rowCount);
}
});
updButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int selectedRow = table.getSelectedRow();//获取被选中行的索引
if (selectedRow != -1) {//存在被选中行
model.setValueAt(aTextField.getText(), selectedRow, 0);//修改第1列的值
model.setValueAt(bTextField.getText(), selectedRow, 1);//修改第2列的值
}
}
});
delButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int selectedRow = table.getSelectedRow();
if (selectedRow != -1) {
model.removeRow(selectedRow);//删除选中的行
}
}
});
model.addTableModelListener(new TableModelListener() {//表格模型监听
public void tableChanged(TableModelEvent e) {
int type = e.getType();//获取事件类型(增、删、改等)
int row = e.getFirstRow();//获取触发事件的行索引
int column = e.getColumn();//获取触发事件的列索引
if (type == TableModelEvent.INSERT) {//如果是"插入"事件
System.out.println("此事件是由\"插入\"触发,在" + row + "行" + column + "列");
} else if (type == TableModelEvent.UPDATE) {
System.out.println("此事件是由\"修改\"触发,在" + row + "行" + column + "列");
} else if (type == TableModelEvent.DELETE) {
System.out.println("此事件是由\"删除\"触发,在" + row + "行" + column + "列");
} else {
System.out.println("此事件是由其他原因触发");
}
}
});
} public static void main(String[] args) {
Demo frame = new Demo();
frame.setVisible(true);
}
}
表格模型的监听 TableModelListener的更多相关文章
- miniui 给表格行添加监听事件的几种方法以及点击某列列名数据不能排序的问题
最近在使用miniui框架做开发,在做表格行的点击监听事件中发现了几个属性,都可以起到监听效果但是执行的结果却大有不同.好了废话不多说,直接上代码. <div id="pageGrid ...
- 【laravel】Eloquent 模型事件和监听方式
所有支持的模型事件 在 Eloquent 模型类上进行查询.插入.更新.删除操作时,会触发相应的模型事件,不管你有没有监听它们.这些事件包括: retrieved 获取到模型实例后触发 creatin ...
- Netty事件监听和处理(下)
上一篇 介绍了事件监听.责任链模型.socket接口和IO模型.线程模型等基本概念,以及Netty的整体结构,这篇就来说下Netty三大核心模块之一:事件监听和处理. 前面提到,Netty是一个NIO ...
- javafx 监听选择变化(TabPane)
editTab.getSelectionModel().selectedIndexProperty().addListener(evnt); javafx2.0 监听树和表的选择变化 Swing中的组 ...
- Android的事件处理机制之基于监听的事件处理
无论是桌面应用还是手机应用程序,面对用户的使用,经常需要处理的便是用户的各种动作,也就是需要为用户动作提供响应,这种为用户动作提供响应的机制就是事件处理. 而Android为我们提供了两套强大的响应机 ...
- Angular.js中使用$watch监听模型变化
$watch简单使用 $watch是一个scope函数,用于监听模型变化,当你的模型部分发生变化时它会通知你. $watch(watchExpression, listener, objectEqua ...
- --@angularJS--$scope.watch监听模型变化
$watch简单使用 $watch是一个scope函数,用于监听模型变化,当你的模型部分发生变化时它会通知你. $watch(watchExpression, listener, objectEqua ...
- Spring之事件监听(观察者模型)
目录 Spring事件监听 一.事件监听案例 1.事件类 2.事件监听类 3.事件发布者 4.配置文件中注册 5.测试 二.Spring中事件监听分析 1. Spring中事件监听的结构 2. 核心角 ...
- 通过jQuery实时监听表格行数变化
[本文出自天外归云的博客园] 使用bootstrap table组件,当使用过滤器的时候,页面的表格行数发生变化,此时需要统计表格行数.想要监听表格变化,如何做呢? 使用场景:有一个表格里放着许多测试 ...
随机推荐
- redis.clients.jedis.exceptions.JedisDataException :READONLY You can't write
分布式直连同步调用测试时出现的错误:主从复制架构下,默认Slave是只读的,如果写入则会报错: redis.clients.jedis.exceptions.JedisDataException: R ...
- C-Lodop提示“有窗口已打开,先关闭它(持续如此请刷新页面)!”
c-lodop显示“有窗口已打开,先关闭它(持续如此时请刷新页面)!”如果连续执行多个预览语句等导致的,可以预先判断一下,并可以自定义修改窗口已打开的提示,该默认提示的位置如本博客的下图http:// ...
- Play framework框架中通过post方式发送请求
搞了好久这个最终还是在play官方文档中看见的发送请求的方式,国内好像很少有使用这个框架的,加之自己不是太愿意宣传,好东西总归是好东西,不说废话了. 在play中发送请求有两种常用的方式,一种get, ...
- Linux 学习 (二) 文件处理命令
Linux达人养成计划 I 学习笔记 ls [选项] [文件或目录] -a: 显示所有文件,包括隐藏文件 -l: 显示详细信息 -d: 查看目录属性 -h: 人性化显示文件大小 -i: 显示inode ...
- Multi-Targeting and Porting a .NET Library to .NET Core 2.0
Creating a new .NET Standard Project The first step for moving this library is to create a new .NET ...
- 提交已经注入文件的表单给后台上传图片 使用ajaxsubmit
- poj-3080(kmp+暴力枚举)
题意:给你多个字符串,问你这几个字符串的最长公共子串是哪个,如果有多个,输出字典序最大的那个,如果最长的公共子串长度小于3,输出一个奇怪的东西: 解题思路:首先看数据,数据不大,开始简单快乐的暴力之路 ...
- Idea中JavaWeb项目部署
1. 添加应用服务器tomcat 2. 将tomcat配置添加到项目中 artifacts配置:添加deploy, 添加artifacts,选择Web Application: Exploded &g ...
- .net core Include问题
本文章为原创文章,转载请注明出处 当时不知道为什么这样写,可能是突然间脑子停止了转动,既然犯过这样的错误,就记录下来吧 错误示例 ).Include(a=>a.User).Select(a =& ...
- java中值类型与引用类型的关系
值类型:就是java的基本类型.byte.short.int.long.float.char.double.boolean 引用类型:类(class).接口(Interface).数组(Array) ...