Java 使用ResultSet TableModel在JTable中设置getColumnClass
我有个问题。 我创建了一个像这样的DefaultTableModel--> 该字段包含“真”/“假”。 我做错了一件事,但我真的不知道到底是什么-( 有人能帮我吗 非常感谢 编辑: 我将buildTableModel更改为:Java 使用ResultSet TableModel在JTable中设置getColumnClass,java,swing,jtable,Java,Swing,Jtable,我有个问题。 我创建了一个像这样的DefaultTableModel--> 该字段包含“真”/“假”。 我做错了一件事,但我真的不知道到底是什么-( 有人能帮我吗 非常感谢 编辑: 我将buildTableModel更改为: public static DefaultTableModel buildTableModel(ResultSet rs) throws SQLException { ResultSetMetaData metaData = rs.getMetaD
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);
}
publicstaticdefaulttablemodel buildTableModel(ResultSet-rs)
抛出SQLException{
ResultSetMetaData元数据=rs.getMetaData();
//列名
向量列名称=新向量(1,1);
int columnCount=metaData.getColumnCount();
对于(int column=1;column您正在尝试将字符串值分配给布尔列(在Swing表中)。只需确保检索到的数据类型(数据模型)与表数据模型的类型匹配。您正在尝试将字符串值分配给布尔列(在Swing表中)。只需确保检索到的数据类型(数据模型)与表数据模型的类型匹配。可以返回(请注意,非常简单的矩阵,并以最少的工作量硬编码)
can返回(注意非常简单的矩阵,并以最少的工作量硬编码)
发布堆栈跟踪。我们甚至不知道是哪一行导致了异常。这是这一行:classType=Boolean.class;如何获取堆栈跟踪?不,这一行不可能导致异常。使用try/catch,然后在catch(exception ex)块中添加ex.printStackTrace()。堆栈跟踪应该出现在console中。顺便说一句,您的代码表明只有第一列是布尔值,其余都是字符串,因此请确保您检索的数据与这些类型匹配。嘿,我使用了以下方法:尝试{UpdateGrid grid=new UpdateGrid(“test”);}catch(异常e){System.out.println(e.getStackTrace());}在类初始化过程中,但无论如何,它都不会改变异常输出:线程“AWT-EventQueue-0”java.lang.ClassCastException中的异常:java.lang.String不能转换为java.lang.Boolean…对不起,我还不太擅长编程,所以我真的很无助-(顺便说一句,触发异常的不是-->classType=Boolean.class;这一行,而是因为它。如果我返回String.class,堆栈跟踪后不会发生错误。我们甚至不知道是哪一行导致了异常。是这一行:classType=Boolean.class;如何获取堆栈跟踪?不,这一行不可能导致异常。使用try/catch,然后在catch(Exception ex)块中添加ex.printStackTrace()。堆栈跟踪应该显示在控制台中。顺便说一句,您的代码表明只有第一列是布尔值,其余都是字符串,因此请确保您检索的数据与这些类型匹配。嘿,我使用了以下方法:try{UpdateGrid grid=new UpdateGrid(在类初始化上执行“test”);}catch(异常e){System.out.println(e.getStackTrace());},但无论如何,它都不会更改异常输出:线程“AWT-EventQueue-0”中的异常“java.lang.ClassCastException:java.lang.String不能转换为java.lang.Boolean…..对不起,我还不太擅长编程,所以我真的很无助;-(顺便说一句,触发异常的不是-->classType=Boolean.class;行-->但正是因为它。如果我返回String.class,就不会发生错误
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;
}
};
java.lang.String cannot be cast to java.lang.Boolean
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);
}
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;
}
}