用户界面希望在作为复选框的jTable中创建一列,但在运行时显示为“class java”。lang.Boolean'
我正在尝试创建一个接受SQL查询的Jtable。我在显示数据之前插入了一列,并将其设置为布尔类。当我运行代码而不是显示复选框时,它会显示“ClassJava”。而不是lang.Boolean
我尝试调用isCellEditable()和getColumnClass()方法
public static void FillTable(JTable table, String Query){
try
{
Connection conn = DriverManager.getConnection(databaseTest.main_conn,"root",databaseTest.db_usrPW);
Statement stat = conn.createStatement();
ResultSet rs = stat.executeQuery(Query);
//Define new model
DefaultTableModel tableModel = new DefaultTableModel();
//Get MetaData from rs
ResultSetMetaData metaData = rs.getMetaData();
//Get number of columns from meta data
int columnCount = (metaData.getColumnCount()+1);
//Add Boolean column
tableModel.addColumn(Boolean.class);
tableModel.getColumnClass(0);
//Get all column names from meta data and add columns to table model
for (int columnIndex = 1; columnIndex < columnCount; columnIndex++){
tableModel.addColumn(metaData.getColumnLabel(columnIndex));
}
//Create array of Objects with size of column count from meta data
Object[] row = new Object[columnCount];
//Scroll through result set
while (rs.next()){
row[0] = Boolean.class;
tableModel.addRow(row);
//Get object from column with specific index of result set to array of objects
for (int i = 1; i < columnCount; i++){
row[i] = rs.getObject(i);
}
//Now add row to table model with that array of objects as an argument
tableModel.addRow(row);
}
db_table.setModel(tableModel);
rs.close();
}catch(Exception e){
e.printStackTrace();
}
}
# 1 楼答案
正如JavaDocs for ^{} 所强调的
虽然评论与
TableRowSorter
的使用有关,但它强调了问题的根本原因getColumnClass
返回的类型为Object
,这意味着它不允许对Boolean
等类型使用默认呈现相反,您将需要创建
TableModel
的自定义实现(我更喜欢AbstractTableModel
,但您仍然可以使用DefaultTableModel
)并覆盖getColumnClass
并为特定列返回更合适的值,例如注意这是一个简单的例子,如果你有多个列,你需要决定每个列返回什么