4

我想插入JCheckBox每一行,JTable所以我尝试更改我的第一列类型。当我尝试此代码时,出现“java.lang.String cannot be cast to 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;
                    }  
           } 
   }
4

2 回答 2

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

我这样做了,它有效

于 2013-09-28T18:36:15.207 回答
1

一定要在你的 中添加 type 的值Boolean.class如此处TableModel所示。另请参阅创建表模型以了解典型实现。

@Override
public Class<?> getColumnClass(int c) {
    return getValueAt(0, c).getClass();
}

附录:我将行值更改为 true.

有几种方法可以确保模型包含 type 的值Boolean.class

  • Boolean.TRUEBoolean.FLASE, 中定义的常数java.lang.Boolean

  • Boolean.valueOf(boolean b),其中b可能是产生 的值或表达式boolean

  • truefalse,自 Java 1.5 以来自动装箱文字。

正如@kleopatra 所指出的,简单的教程实现无法满足两个基本标准:

  • 警惕null价值观。

  • 在模型的生命周期内返回相同的值。

于 2013-09-28T00:44:28.070 回答