Swing 的JTable 对应有一个数据模型,该数据模型包装了用于显示于表格的数据,为的是便于对数据进行操作处理。具体数据类型可以通过继承AbstractTableModel实现,并且通过setValueAt(Object aValue, int rowIndex, int columnIndex)和isCellEditable(int rowIndex, int columnIndex)两个方法,可以判断在哪个单元格显示哪种控件。
下面为一数据类型具体实现类:
class AttrTableDataModel extends AbstractTableModel {
public int getColumnCount() {
return AttrTableTemplate.columnNames.length;
}
public int getRowCount() {
return AttrTableTemplate.reportAttrNames.length;
}
public Object getValueAt(int rowIndex, int columnIndex) {
short code = AttrTableTemplate.reportAttrNames[rowIndex];
if (columnIndex == 0) {
return CellPropertyDefine.getPropertyTitle(code);
} else if (columnIndex == 1) {
return cell.getValue(code);
} else if (columnIndex == 2) {
return cell.getExpression(code);
} else {
return "";
}
}
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
short code = AttrTableTemplate.reportAttrNames[rowIndex];
System.out.println(" setValueAt ==" + aValue + " " + rowIndex
+ " " + columnIndex);
if (columnIndex == 1) {
cell.setValue(code, aValue);
}
if (columnIndex == 2) {
if (aValue != null) {
cell.setExpression(code, aValue.toString());
} else {
cell.setExpression(code, null);
}
}
TableColumn curColumn = attrTable.getColumnModel().getColumn(
columnIndex);
curColumn.setCellEditor(null); //清空编辑控件
}
public String getColumnName(int column) {
return AttrTableTemplate.columnNames[column];
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
System.out.println("isCellEdit==" + rowIndex + " " + columnIndex);
short code = AttrTableTemplate.reportAttrNames[rowIndex];
TableColumn curColumn = attrTable.getColumnModel().getColumn(
columnIndex);
if (columnIndex == 1) {
Vector comboItems = CellPropertyDefine.getValues(code, true);
System.out.println("comboItems==" + comboItems);
if (comboItems.size() != 0) { //判断是什么编辑控件
TableCellComboEditor cellCombo = new TableCellComboEditor(
comboItems);
cellCombo.setColumn(curColumn);
}
}
if (columnIndex == 2) { //判断是什么编辑控件
TableCellExpressionEditor cellExp = new TableCellExpressionEditor();
cellExp.setColumn(curColumn);
}
if (columnIndex != 0) {
return true;
} else {
return false;
}
}
}
如何使用该模型示例:
attrTable = new JTable(new AttrTableDataModel());
attrTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
attrTable.setCellSelectionEnabled(true);