表格模型(DefaultTableModel)(简单代码例子实现)

本文介绍了一个使用Java Swing的JTable组件进行表格模型操作的示例代码,包括添加、修改和删除表格数据,以及如何响应表格模型事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.awt.*;
import java.awt.event.*;

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

public class Main extends JFrame {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private DefaultTableModel tableModel;// 定义表格模型对象
	private JTable table;// 定义表格对象
	private JTextField aTextField;
	private JTextField bTextField;
	
	public static void main(String args[]) {
		Main frame = new Main();
		frame.setVisible(true);
	}
	
	public Main() {
		super();
		setTitle("维护表格模型");
		setBounds(100, 100, 510, 375);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		final JScrollPane scrollPane = new JScrollPane();
		getContentPane().add(scrollPane, BorderLayout.CENTER);
		String[] columnNames = { "A", "B" };// 定义表格列名数组
		String[][] tableValues = { { "A1", "B1" }, { "A2", "B2" },
				{ "A3", "B3" } };// 定义表格数据数组
		// 创建指定表格列名和表格数据的表格模型
		//tableValues:封装表格数据的数组,columnNames:封装表格列名的数组
		tableModel = new DefaultTableModel(tableValues, columnNames);
		
		table = new JTable(tableModel);// 创建指定表格模型的表格(构造方法载入模型)
//		table = new  JTable();
//		table.setModel(tableModel);
		
		table.setRowSorter(new TableRowSorter<>(tableModel));// 设置表格的排序器
		// 设置表格的选择模式为单选
		table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		// 为表格添加鼠标事件监听器
		table.addMouseListener(new MouseAdapter() {
			// 发生了点击事件
			public void mouseClicked(MouseEvent e) {
				// 获得被选中行的索引
				int selectedRow = table.getSelectedRow();
				// 从表格模型中获得指定单元格的值
				Object oa = tableModel.getValueAt(selectedRow, 0);
				// 从表格模型中获得指定单元格的值
				Object ob = tableModel.getValueAt(selectedRow, 1);
				aTextField.setText(oa.toString());// 将值赋值给文本框
				bTextField.setText(ob.toString());// 将值赋值给文本框
			}
		});
		scrollPane.setViewportView(table);
		
		//添加第二部分面板,运用边界布局位置南
		final JPanel panel = new JPanel();
		getContentPane().add(panel, BorderLayout.SOUTH);
		
		panel.add(new JLabel("A:"));
		aTextField = new JTextField("A4", 10);
		panel.add(aTextField);
		panel.add(new JLabel("B:"));
		bTextField = new JTextField("B4", 10);
		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);// 向表格模型中添加一行
				int rowCount = table.getRowCount() + 1;
				aTextField.setText("A" + rowCount);
				bTextField.setText("B" + rowCount);
			}
		});
		panel.add(addButton);
		final JButton updButton = new JButton("修改");
		updButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				int selectedRow = table.getSelectedRow();// 获得被选中行的索引
				if (selectedRow != -1) {// 判断是否存在被选中行
					tableModel.setValueAt(aTextField.getText(),
							selectedRow, 0);// 修改表格模型当中的指定值
					tableModel.setValueAt(bTextField.getText(),
							selectedRow, 1);// 修改表格模型当中的指定值
				}
			}
		});
		panel.add(updButton);
		final JButton delButton = new JButton("删除");
		delButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				int selectedRow = table.getSelectedRow();// 获得被选中行的索引
				if (selectedRow != -1)// 判断是否存在被选中行
					// 从表格模型当中删除指定行
					tableModel.removeRow(selectedRow);
			}
		});
		panel.add(delButton);
		
		//表格模型事件的监听
		tableModel.addTableModelListener(new TableModelListener() {
			
			@Override
			public void tableChanged(TableModelEvent arg0) {
				int type = arg0.getType();//获取事件类型
				int row = arg0.getFirstRow();//获取触发事件的行索引
				int column = arg0.getColumn();//获取触发事件的列索引
				if(type == TableModelEvent.INSERT) {
					System.out.println("此事件由插入行触发");
					System.out.println("插入的行数为 " + row);
				}else if(type == TableModelEvent.UPDATE) {
					System.out.println("此事件由修改行触发");
					System.out.println("修改的行数为 " + row + "修改的列数为 " + column);
				}else if(type == TableModelEvent.DELETE) {
					System.out.println("此事件由删除行触发");
					System.out.println("删除的行数为 " + row);
				}else {
					System.out.println("其他操作造成的");
				}
				
			}
		});
	}
}

运行结果为:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值