表格模型的监听 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组件,当使用过滤器的时候,页面的表格行数发生变化,此时需要统计表格行数.想要监听表格变化,如何做呢? 使用场景:有一个表格里放着许多测试 ...
随机推荐
- 01.javascript之数据类型
1.数据类型 JavaScript一共有六种数据类型.(ES6新增了第七种Symbol类型的值) 数值(Number) 字符串(String) 布尔值(boolean) undefined null ...
- Microsoft Azure Machine Learning Studio
随着机器学习(ML)成为软件行业的主流,重要的是要了解它的工作原理,并将其置于开发栈中.了解如何为您的应用程序构建ML服务,您可以确定您的ML应用程序中的机会,实施ML,并与您的团队的ML专业人士清楚 ...
- Express学习(2) ------ 中间件
TJ Holowaychuck 将 “中间件”描述为易于挂载和调用的模块,可以“无序”使用,并有利于应用的快速开发. 1, 中间件是一个模块.在js中,模块意味着函数,所以中间件是一个函数.那么这个函 ...
- 【深入Java虚拟机】之一:Java内存模型
[深入Java虚拟机]之:Java内存区域与内存溢出 内存区域 Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域.Java虚拟机规范将JVM所管理的内存分为以下几个 ...
- webpack 打包编译-webkit-box-orient: vertical 后消失
/* autoprefixer: off */ -webkit-box-orient: vertical; // 参考 https://github.com/postcss/autoprefixer/ ...
- python模块psutil的使用
介绍 psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等)信息.它主要应用于系统 ...
- linux中安装gcc
在使用CentOS的yum -y install 时 可以先进入 /etc/yum.repos.d/ 文件下,将CentOS-Base.repo文件名改为CentOS-Base.repo.bak使 ...
- jsp大学作业:jsp编写单选,复选判断题及得分情况
project_1_1.jsp <%@ page contentType="text/html;charset=utf-8" language="java" ...
- Sudoku POJ - 2676(DLX)
Sudoku Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 25356 Accepted: 11849 Specia ...
- 【BZOJ3814】【清华集训2014】简单回路 状压DP
题目描述 给你一个\(n\times m\)的网格图和\(k\)个障碍,有\(q\)个询问,每次问你有多少个不同的不经过任何一个障碍点且经过\((x,y)\)与\((x+1,y)\)之间的简单回路 \ ...