JTable的事件处理

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

JTable的事件处理

JTable的事件处理

在前面的介绍中,我们了解了数种在不同组件上的事件处理。同样,在JTable的事件大致均针对表格内容的异操作处理,包括字段内容改变,列数增加

或减少,行数增加或减少,或是表格的结构改变等等。这些事件我们称为TableModelEvent事件。要处理TableModelEvent事件我们必须实现TableModelListener 界面,此界面定义了一个方法,那就是tableChanged(),为了处理这些事件的种种

情况,在AbstractTableModel类中提供了下列方法来提示TableModelListener:表格内容已经改动了,如下所示:

1.fireTableCellUpdated():发出表格中的某一个字段已经更改的事件信息。

2.fireTableChanged():发出表格已经改动的事件信息。

3.fireTableDataChanged():发出表格中的某字段已经更改的事件信息。

4.fireTableRowsDeleted():发出表格中的某几行已经删除的事件信息。

5.fireTableRowsInserted():发出表格中的已经新增某几行的事件信息。

6.fireTableRowsUpdated():发出表格中的某几行已经修

改的事件信息。

7.fireTableStructureChanged():发出表格结构已经改变

的事件信息,这里指的结构改变可能包括表格的列数已经改变。

在知道在表格中可能发生的事件后,我们要如何拦截这些事件的信息呢?在AbstractTableModel类中提供了一个

注册listener的方法

:addTableModelListener().在加入TableModelListener之后,我们就可以依照不同的事件做不同的处理了。

先来看看下面的例子吧,这个例子主要是更改本章的ColumnModelTest.java范例,再加上一些功能。在这个范

例中,我们针对用户对

表格所做的修改加以处理,如果改的项目是数字,包括“语文”,“数学”字段,则我们直接将修改的值累加至"总分"字段,并检查其是

否及格且在“及格”字段作修改;而当我们勾起"作弊"列的Check Box选项时,若原本总分应为及格者,则设置为不及格,且总分改成119

分。import javax.swing.table.AbstractTableModel;

import javax.swing.event.*;

import javax.swing.table.*;

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.util.*;public class TableEventHandle implements TableModelListener

{

JTable table = null;

MyTable mt = null;

JLabel label = null; //显示修改字段位置

public TableEventHandle() {

JFrame f = new JFrame();

mt=new MyTable();

mt.addTableModelListener(this);

table=new JTable(mt);

JComboBox c = new JComboBox();

c.addItem("Taipei");

c.addItem("ChiaYi");

c.addItem("HsinChu");

table.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(c));

table.setPreferredScrollableViewportSize(new Dimension(550, 30));// 设置此表视口的首选大小。

JScrollPane s = new JScrollPane(table);

label = new JLabel("修改字段位置:");

f.getContentPane().add(s,

BorderLayout.CENTER);

f.getContentPane().add(label,

BorderLayout.SOUTH);

f.setTitle("TableEventHandle");

f.pack();

f.setVisible(true);

f.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

} public void tableChanged(TableModelEvent e) {

int row = e.getFirstRow();

int column = e.getColumn();

label.setText("修改字段位置:"+(row+1)+" 行"+(column+1)+" 列");

boolean cheat

=((Boolean)(mt.getValueAt(row,6))).booleanValue();

int

grade1=((Integer)(mt.getValueAt(row,2))).intValue();

int

grade2=((Integer)(mt.getValueAt(row,3))).intValue();

int total = grade1+grade2;

if(cheat)

{

if(total > 120)

mt.mySetValueAt(new Integer(119),row,4);

else

mt.mySetValueAt(new Integer(total),row,4);

mt.mySetValueAt(new Boolean(false),row,5);

}

相关文档
最新文档