我想在JCheckBox
的每一行中插入JTable
,所以我尝试更改我的第一列类型。当我尝试这段代码时,我得到“java.lang.String无法转换为java.lang.Boolean”错误。
DefaultTableModel model=new DefaultTableModel(){
private static final long serialVersionUID = 1L;
@Override
public Class<?> getColumnClass(int column) {
switch (column) {
case 0:
return Boolean.class;
case 1:
return String.class;
case 2:
return String.class;
case 3:
return String.class;
default:
return String.class;
}
}
}
答案 0 :(得分:1)
确保将Boolean.class
类型的值添加到TableModel
,如图here所示。有关典型实现,另请参阅Creating a Table Model。
@Override
public Class<?> getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
附录:我将行值更改为 true
。
有几种方法可以确保模型包含Boolean.class
类型的值:
Boolean.TRUE
或Boolean.FLASE
,java.lang.Boolean
中定义的常量。
Boolean.valueOf(boolean b)
,其中b
可能是一个产生boolean
的值或表达式。
正如@kleopatra所说,简单的教程实现无法满足两个基本要求:
防范null
值。
返回模型生命周期的相同值。
答案 1 :(得分:1)
static String[] columnNames={"Name","Surname","Boolean"};
static Object[][] data={ {null,null,null };
JTable table=new JTable(data,columnNames);
public static void RESULTS(){
try{
rs=stm.executeQuery(sql);
Object[] row=new Object[2];
DefaultTableModel model=new DefaultTableModel(){
private static final long serialVersionUID = 1L;
@Override
public Class<?> getColumnClass(int column) {
switch (column) {
case 2: return Boolean.class;
default: return String.class;
}
}
};
table.setModel(model);
model.setColumnIdentifiers(columNames);
while (rs.next()){
for (int v=1;v<3;v++){
if(v==2){ row[2]=false; // or true..
}
else{ row[v-1]=rs.getObject(v); }
}
model.addRow(row);
}//while
rs.close();
}//try
catch (SQLException e) { System.out.println(e); }
}
我做到了,它有效