import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
/***
* 功能:处理JTable,包括现实列表,对列表改动等
* @author
*
*/
public class ReportTableModel extends DefaultTableModel {
/**
*
*/
private static final long serialVersionUID = 1L;
Object[][] data;
Object[] columnNames;
ReportTableModel(Object[][] data, Object[] columnNames) {
this.data = data;
this.columnNames = columnNames;
}
public int getColumnCount() {
return columnNames.length;
}
public int getRowCount() {
if(data==null)return 0;
return data.length;
}
public Object getValueAt(int row, int col) {
// System.out.println("第"+(row+1)+"行"+(col+1)+"列:"+data[row][col]);
return data[row][col];
}
// 该方法不一定要加入AbstractTableModel类,该方法设置列表的标题
public String getColumnName(int col) {
return columnNames[col] + "";
}
// 通过getClass()方法设置默认的控件,如true与false的默认控件是复选框,
// 该方法不一定要加入AbstractTableModel类
public Class getColumnClass(int c) {
if(null == getValueAt(0, c))
{//防止某一列没有赋值,Boolean类型的话,直接在VO默认为false,所以在这不判断。
return String.class;
}else{
return getValueAt(0, c).getClass();
}
}
// 定义可以编辑的单元,true表示可编辑,false表示不可编辑
public boolean isCellEditable(int row, int col) {
return true;
}
// 将改变后的值保存在表格中
public void setValueAt(Object value, int row, int col) {
data[row][col] = value;
System.out.println(row + 1 + "行:" + (col + 1) + "列:" + value);
fireTableCellUpdated(row, col);
}
}
应用:
Object[][] data={{false,"栏目1"},{false,"栏目2"}};
Object[][] title={ "是否打印", "栏目名"};
ReportTableModel model = new ReportTableModel(data,o);
//计算列的值(列是固定,行循环)
int[] cols={1,4,7};
String[] sumCount= new String[];
String[] sumCount= new String[title.length];
for(int i=0;i<model.getRowCount();i++){
model.getValueAt(i, 1);//这里列可做遍历,一次性统计
}
model.addRow();
JTable tableColumn = new JTable();
tableColumn.setModel(model);