gpt4 book ai didi

java - 使用 ResultSet TableModel 在 JTable 中设置 getColumnClass

转载 作者:行者123 更新时间:2023-12-01 21:18:45 24 4
gpt4 key购买 nike

我有一个问题。我创建一个像这样的 DefaultTableModel -->

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);

}

ResulSet 填充了 MySQL 数据库的一些数据。之后,我使用 DataModel 创建一个 JTable 并覆盖设置表属性:

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;
}
};

如果我不使用第二部分(@Override getColumClass),它工作正常,但如果我添加 getColumnClass 部分,我会收到此错误消息:

java.lang.String cannot be cast to java.lang.Boolean

该字段包含“true”/“false”。我做了一些非常错误的事情,但我真的不知道到底是什么;-(有人可以帮我解决这个问题吗?

非常感谢

编辑:我将 buildTableModel 更改为:

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++) {

if(rs.getObject(columnIndex).toString().equals("true"))
vector.add(Boolean.TRUE);
else
if(rs.getObject(columnIndex).toString().equals("false"))
vector.add(Boolean.FALSE);
else
vector.add(rs.getObject(columnIndex));
}

data.add(vector);
}

return new DefaultTableModel(data, columnNames);

}

现在可以了;-)

最佳答案

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;
}
}

关于java - 使用 ResultSet TableModel 在 JTable 中设置 getColumnClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39484726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com