如何在JTable中更改或查找列类型

时间:2013-09-27 22:06:02

标签: java swing checkbox jtable

我想在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;
                    }  
           } 
   }

2 个答案:

答案 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.TRUEBoolean.FLASEjava.lang.Boolean中定义的常量。

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

  • 自li 1.5以来
  • truefalseliterals autoboxed

正如@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); }           
 }

我做到了,它有效