使用数据模型tablemodel.setValueAt(new Float(sum),4,5);放在tablechanged事件中修改某个cell的值会引发
连锁事件,因为setvalueat会触发tablechanged事件,因此在使用的时候需要注意。
private void initTable(JTable table) {
String[] colname = {
"序号", "姓名", "年龄", "性别", "出生日期", "工资"};
DefaultTableModel tablemodel = new DefaultTableModel(colname, 0);
table.setModel(tablemodel);
Vector v = new Vector();
v.add(new Integer(1));
v.add("张三");
v.add("20");
v.add("");
v.add("");
v.add("");
v.add("");
tablemodel.addRow(v);
v = new Vector();
v.add(new Integer(2));
v.add("李四");
v.add("21");
v.add("");
v.add("");
v.add("");
v.add("");
tablemodel.addRow(v);
v = new Vector();
v.add(new Integer(3));
v.add("王五");
v.add("23");
v.add("");
v.add("");
v.add("");
v.add("");
tablemodel.addRow(v);
v = new Vector();
v.add(new Integer(4));
v.add("阮六");
v.add("29");
v.add("");
v.add("");
v.add("");
v.add("");
tablemodel.addRow(v);
v = new Vector();
v.add(new Integer(5));
v.add("合计");
v.add("");
v.add("");
v.add("");
v.add("");
tablemodel.addRow(v);
tablemodel.addTableModelListener(new TableModelListener() {
public void tableChanged(TableModelEvent e) {
System.out.println(e.getLastRow());
if(e.getLastRow()==4) return ;
DefaultTableModel tablemodel = (DefaultTableModel) e.getSource();
float sum = 0;
for (int i = 0; i < 4; i++) {
Object obj = tablemodel.getValueAt(i, 5);
if (!"".equals(obj) && obj != null) {
sum += Float.valueOf(obj.toString()).floatValue();
}
}
tablemodel.setValueAt(new Float(sum),4,5);
}
});
}