简介
当向表格模型中添加行时,或者是修改或删除表格模型中的现有行时,将发出表格模型事件。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();
}
}