📄 databasetablemodel.java
字号:
package database;
import java.sql.Types;
import javax.swing.table.AbstractTableModel;
import Bank.AccountInfo;
/**
* 描述数据库字段信息
*
*/
class DatabaseTableColumn{
private String name; //表格列名(列标题)
private String field; //表列所对应的字段名称
private Class type; //表列的类型所属的类
private int width; //表列宽度
private int sqlType; //表列类型在Sql中的编码值
public DatabaseTableColumn(String name,String field,Class type,int width,int sqlType){
this.name = name;
this.field = field;
this.type = type;
this.width = width;
this.sqlType = sqlType;
}
public String getName(){return name;}
public String getField(){return field;}
public Class getType(){return type;}
public int getWidth(){return width;}
public int getSqlType(){return sqlType;}
}
/**
* 数据库的表格所使用的数据模型
*
*/
public class DatabaseTableModel extends AbstractTableModel{
/**
* serialVersionUID不知道是什么!
*/
private static final long serialVersionUID = 1L;
protected static DatabaseTableColumn[] columns; //表列信息
protected int keyCol; //关键字段所在的列
//表格中的数据,ArrayList的元素类型是Object[],长度为columnNames.length
protected AccountInfo[] data;
//指明使用该模型的表格是否可修改表格单元,关键字段所在的列总是不可修改的
protected boolean modifiable;
protected String keyField;
public DatabaseTableModel(AccountInfo[] data,/*DatabaseTableColumn[] columns,String keyField,*/boolean modifiable){
this.data = data;
columns = initializeColumns();
keyField = getKeyField();
//this.columns = columns;
keyCol = 0;
for(int i = 0;i<columns.length;i++){
if(keyField.equals(columns[i].getField())){keyCol = i;break;}
}
this.modifiable = modifiable;
}
/**
* 以下方法是在类AbstactTableModel定义的抽象方法,必须重定义它们
*/
//返回表列数
public int getColumnCount(){return columns.length;}
//返回表列名称
public String getColumnName(int col){return columns[col].getName();}
//返回表列数据所属的类型
public Class getColumnClass(int col){return columns[col].getType();}
//返回列的表格单元是否可修改
public boolean isCellEditable(int row,int col){
if(col == keyCol)return false;
else return modifiable;
}
//返回某个单元的数据
public Object getValueAt(int row,int col){
Object rowData = null;
if(col ==0){
rowData = data[row].id;
}else if(col == 1){
rowData = data[row].name;
}else if (col == 2){
rowData = Float.valueOf(data[row].balance);
}
return rowData;
}
//设置某个表格单元的数据
public void setValueAt(Object value,int row,int col){
//Object rowData = data[row];
//data[row] = (AccountInfo)value;
if(col ==0){
data[row].id = (String)value;
}else if(col ==1){
data[row].name = (String)value;
}else if(col == 2){
data[row].balance = ((Float)value).floatValue();
}
fireTableCellUpdated(row,col);
}
//返回表行数
public int getRowCount(){return data.length;}
//返回表格第col列所对应的数据字段名称
public String getFieldName(int col){return columns[col].getField();}
//返回关键字段在表格中的列下标
public int getKeyFieldColumn(){return keyCol;}
//返回关键字段值为keyId的记录在表格中的行下标
public int getKeyIdRow(Object keyId){
/*
for(int i = 0;i<data.length;i++){
Object rowData = data[i];
if(rowDate..equals(keyId))return i;
}
*/
return 0;
}
//增加一行数据
public void addRow(Object[] rowData){
//data.add(rowData);
//fireTableRowsInserted(data.size(),data.size());
}
/**
* 初始化数据表的字段信息
* @return 返回设好的列表
*/
public static DatabaseTableColumn[] initializeColumns(){
columns = new DatabaseTableColumn[3];
try{
Class StringClass = Class.forName("java.lang.String");
Class FloatClass = Class.forName("java.lang.Float");
columns[0] = new DatabaseTableColumn("id","id",StringClass,10,Types.VARCHAR);
columns[1] = new DatabaseTableColumn("name","name",StringClass,10,Types.VARCHAR);
columns[2] = new DatabaseTableColumn("balance","balance",FloatClass,2,Types.FLOAT);
}catch(ClassNotFoundException exc){
exc.printStackTrace();
}
return columns;
}
public String getKeyField(){return "id";}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -