我有问题。 我创建了一个像这样的DefaultTableModel - >
alpine-extended-3.4.3-x86.iso
ResulSet充满了MySQL数据库的一些数据。 之后,我使用DataModel创建一个JTable并覆盖设置tableproperties:
public static DefaultTableModel buildTableModel(ResultSet rs)
throws SQLException {
ResultSetMetaData metaData = rs.getMetaData();
// names of columns
Vector<String> columnNames = new Vector<String>(1,1);
int columnCount = metaData.getColumnCount();
for (int column = 1; column <= columnCount; column++) {
columnNames.add(metaData.getColumnName(column));
}
// data of the table
Vector<Vector<Object>> data = new Vector<Vector<Object>>(10,2);
while (rs.next()) {
Vector<Object> vector = new Vector<Object>();
for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {
vector.add(rs.getObject(columnIndex));
}
data.add(vector);
}
return new DefaultTableModel(data, columnNames);
}
如果我不使用第二部分(@Override getColumClass),它可以正常工作,但如果我添加getColumnClass部分,我会得到这个错误消息:
this.table = new JTable(buildTableModel(this.rs)){
// Make Cells uneditable
@Override
public boolean isCellEditable(int row, int column) {
if(table.getColumnName(column).contains("key")) return false;
if(table.getColumnName(column).contains("datum")) return false;
if(table.getColumnName(column).contains("user")) return false;
return true;
}
@Override
public Class<?> getColumnClass(int columnIndex) {
Class<?> classType;
if(columnIndex == 1)
classType = Boolean.class;
else
classType = String.class;
return classType;
}
};
该字段包含“true”/“false”。 我做错了什么,但我真的不知道究竟是什么;-( 有人可以帮我解决这个问题吗?
非常感谢
编辑: 我将buildTableModel更改为:
java.lang.String cannot be cast to java.lang.Boolean
现在可行; - )
答案 0 :(得分:2)
metaData.getColumnType可以返回(注意非常简单的矩阵并且用最少的努力硬编码)
public Class getColumnClass(int column) {
int type;
try {
type = metaData.getColumnType(column + 1);
} catch (SQLException e) {
return super.getColumnClass(column);
}
switch (type) {
case Types.CHAR:
case Types.VARCHAR:
case Types.LONGVARCHAR:
return String.class;
case Types.BIT:
return Boolean.class;
case Types.TINYINT:
case Types.SMALLINT:
case Types.INTEGER:
return Integer.class;
case Types.BIGINT:
return Long.class;
case Types.FLOAT:
case Types.DOUBLE:
return Double.class;
case Types.DATE:
return java.sql.Date.class;
default:
return Object.class;
}
}
答案 1 :(得分:1)
您正在尝试将String值分配给布尔列(在Swing表中)。只需确保检索到的数据类型(数据模型)与表数据模型的类型相匹配。