当表格内容发生改变,监听做了哪些操作,需要表格模型的监听 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的更多相关文章

  1. miniui 给表格行添加监听事件的几种方法以及点击某列列名数据不能排序的问题

    最近在使用miniui框架做开发,在做表格行的点击监听事件中发现了几个属性,都可以起到监听效果但是执行的结果却大有不同.好了废话不多说,直接上代码. <div id="pageGrid ...

  2. 【laravel】Eloquent 模型事件和监听方式

    所有支持的模型事件 在 Eloquent 模型类上进行查询.插入.更新.删除操作时,会触发相应的模型事件,不管你有没有监听它们.这些事件包括: retrieved 获取到模型实例后触发 creatin ...

  3. Netty事件监听和处理(下)

    上一篇 介绍了事件监听.责任链模型.socket接口和IO模型.线程模型等基本概念,以及Netty的整体结构,这篇就来说下Netty三大核心模块之一:事件监听和处理. 前面提到,Netty是一个NIO ...

  4. javafx 监听选择变化(TabPane)

    editTab.getSelectionModel().selectedIndexProperty().addListener(evnt); javafx2.0 监听树和表的选择变化 Swing中的组 ...

  5. Android的事件处理机制之基于监听的事件处理

    无论是桌面应用还是手机应用程序,面对用户的使用,经常需要处理的便是用户的各种动作,也就是需要为用户动作提供响应,这种为用户动作提供响应的机制就是事件处理. 而Android为我们提供了两套强大的响应机 ...

  6. Angular.js中使用$watch监听模型变化

    $watch简单使用 $watch是一个scope函数,用于监听模型变化,当你的模型部分发生变化时它会通知你. $watch(watchExpression, listener, objectEqua ...

  7. --@angularJS--$scope.watch监听模型变化

    $watch简单使用 $watch是一个scope函数,用于监听模型变化,当你的模型部分发生变化时它会通知你. $watch(watchExpression, listener, objectEqua ...

  8. Spring之事件监听(观察者模型)

    目录 Spring事件监听 一.事件监听案例 1.事件类 2.事件监听类 3.事件发布者 4.配置文件中注册 5.测试 二.Spring中事件监听分析 1. Spring中事件监听的结构 2. 核心角 ...

  9. 通过jQuery实时监听表格行数变化

    [本文出自天外归云的博客园] 使用bootstrap table组件,当使用过滤器的时候,页面的表格行数发生变化,此时需要统计表格行数.想要监听表格变化,如何做呢? 使用场景:有一个表格里放着许多测试 ...

随机推荐

  1. query中对应的OnSetText和onGetText事件

    今天在看代码的时候遇到一个问题,query中的某个字段和在表中显示的不是一个值,我觉得很奇怪,于是找了很久,才知道为什么,原来是query中的OnSetText和onGetText事件在作怪,经过一番 ...

  2. javascript中 json数据的解析与序列化

    首先明确一下概念: json格式数据本质上就是字符串: js对象:JavaScript 中的几乎所有事务都是对象:字符串.数字.数组.日期.函数,等等. json数据的解析: 就是把后端传来的json ...

  3. 跳转语句之continue

    js里面有两个跳转语句,一个是continue,一个是break.由于这两个跳转语句都是用于循环当中,因此他们也就只能用于while.for.do…while语句中,当然了,break多加一个swit ...

  4. java excel Workbook API

    此文摘自:http://blog.sina.com.cn/zenyunhai 1. int getNumberOfSheets() 获得工作薄(Workbook)中工作表(Sheet)的个数,示例: ...

  5. windows电脑连接蓝牙耳机的正确步骤

    前言 我使用的是小米运动蓝牙耳机,操作系统为win7,废话少说直接上教程 是否支持蓝牙功能 按住win+R,打开[运行],输入devmgmt.msc,回车. 只要有Bluetooth 无线电收发器,那 ...

  6. 【CF809E】Surprise me! 树形DP 虚树 数学

    题目大意 给你一棵\(n\)个点的树,每个点有权值\(a_i\),\(a\)为一个排列,求 \[ \frac{1}{n(n-1)}\sum_{i=1}^n\sum_{j=1}^n \varphi(a_ ...

  7. 【XSY1591】卡片游戏 DP

    题目描述 有标有数字为\(1\)~\(9\)的卡片各\(a_1,a_2\cdots a_9\)张,还有标有乘号的卡片\(m\)张.从中取出\(n\)张按任意顺序排列,取出两个乘号相邻和乘法在边界上的非 ...

  8. 对如下字符串(234453)[234]{2324}分析它的括号使用是否正确,括号匹配(Java实现)

    我的一种思路是递归: private static String s = "(2344[)]53[234]{2324}"; private static boolean f(int ...

  9. Windows如何使用bin文件下的命令

    开发人员安装了一些软件,例如git.maven.gradle等,需要用到对应的bin文件夹下的相应的命令. 如果直接使用,会报错“不是内部或外部命令,也不是可运行的程序或批处理文件” 一.这时往往会配 ...

  10. MT【267】第一次很重要

    \begin{equation*}\textbf{已知}x_1,x_2<\pi,x_{n+1}=x_n+\left\{ \begin{aligned} sin x_n &,x_n> ...