Java TableModelEvent类(表格模型事件)

简介

当向表格模型中添加行时,或者是修改或删除表格模型中的现有行时,将发出表格模型事件。TableModelEvent类负责捕获表格模型事件,可以通过为组件添加实现了TableModelListener接口的监听器类来处理相应的表格模型事件。

TableModelListener接口只有一个抽象方法,当向表格模型中添加行时,或者是修改或删除表格模型中的现有行时,该方法将被触发,TableModelListener接口的具体定义如下所示:

public interface TableModelListener extends java.util.EventListener {
    public void tableChanged(TableModelEvent e);
}

常用方法

getType():获得此次事件的类型,返回值为 int 型值(INSERT代表插入行、UPDATE代表修改行、DELETE代表删除行)

getFirstRow():获得触发此次事件的表格行的最小索引值

getLastRow():获得触发此次事件的表格行的最大索引值

getColumn(): 如果事件类型为UPDATE,获得触发此次事件的表格列的索引值,否则将返回 -1

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

import javax.swing.*;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.*;

public class t3 extends JFrame{
	
	private static final long serialVersionUID = 1L; 
	private JTable table;// 声明一个表格对象
	private DefaultTableModel tableModel;// 声明一个表格模型对象
	private JTextField aTextField;
	private JTextField bTextField;
	
	public t3() {
		setTitle("Hern");
		setBounds(400, 400, 400, 400);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		final JScrollPane scrollPane = new JScrollPane();
		add(scrollPane, BorderLayout.CENTER);
		String[] columnNames = { "A", "B" };
		String[][] rowValues = { { "A1", "B1" }, { "A2", "B2" },
				{ "A3", "B3" }, { "A4", "B4" } };
		// 创建表格模型对象
		tableModel = new DefaultTableModel(rowValues, columnNames);
		// 为表格模型添加事件监听器
		tableModel.addTableModelListener(new TableModelListener() {
			
			@Override
			public void tableChanged(TableModelEvent e) {
				// TODO Auto-generated method stub
				int type = e.getType();// 获得事件的类型
				int row = e.getFirstRow() + 1;// 获得触发此次事件的表格行索引
				int column = e.getColumn() + 1;// 获得触发此次事件的表格列索引
				if (type == TableModelEvent.INSERT) {// 判断是否有插入行触发
					System.out.print("此次事件由 插入 行触发,");
					System.out.println("此次插入的是第 " + row + " 行!");
					// 判断是否有修改行触发
				} else if (type == TableModelEvent.UPDATE) {
					System.out.print("此次事件由 修改 行触发,");
					System.out.println("此次修改的是第 " + row + " 行第 " + column
							+ " 列!");
					// 判断是否有删除行触发
				} else if (type == TableModelEvent.DELETE) {
					System.out.print("此次事件由 删除 行触发,");
					System.out.println("此次删除的是第 " + row + " 行!");
				} else {
					System.out.println("此次事件由 其他原因 触发!");
				}
			}
		});
		
		table = new JTable(tableModel);// 利用表格模型对象创建表格对象
		table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		scrollPane.setViewportView(table);
		
		final JPanel panel = new JPanel();
		add(panel, BorderLayout.SOUTH);
		
		final JLabel aLabel = new JLabel("A:");
		panel.add(aLabel);
		aTextField = new JTextField(15);
		panel.add(aTextField);
		
		final JLabel bLabel = new JLabel("B:");
		panel.add(bLabel);
		bTextField = new JTextField(15);
		panel.add(bTextField);
		
		final JButton addButton = new JButton("添加");
		addButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String[] rowValues = { aTextField.getText(),
						bTextField.getText() };
				tableModel.addRow(rowValues);// 向表格模型中添加一行
				aTextField.setText(null);
				bTextField.setText(null);
			}
		});
		panel.add(addButton);
		
		final JButton delButton = new JButton("删除");
		delButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// 获得表格中的选中行
				int[] selectedRows = table.getSelectedRows();
				for (int row = 0; row < selectedRows.length; row++) {
					// 从表格模型中移除表格中的选中行
					tableModel.removeRow(selectedRows[row] - row);
				}
			}
		});
		panel.add(delButton);
		
		setVisible(true);
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		t3 test = new t3();

	}

}

猜你喜欢

转载自blog.csdn.net/qq_36761831/article/details/81570834
今日推荐