2013-09-27 41 views
3

我想在JTable的每一行中插入JCheckBox,所以我嘗試更改我的第一列類型。當我嘗試這段代碼時,我得到「java.lang.String不能轉換爲java.lang.Boolean」錯誤。如何在JTable中更改或查找列類型

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

回答

1

肯定要Boolean.class類型的值添加到您的TableModel,如圖所示here。有關典型實現,另請參閱Creating a Table Model

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

附錄:我換行值作爲true

有幾種方法,以確保該模型包含Boolean.class類型的值:在java.lang.Boolean定義

  • Boolean.TRUEBoolean.FLASE,常量。

  • Boolean.valueOf(boolean b),其中b可以是一個值或表達產生boolean

  • truefalseliterals是因爲Java 1.5的autoboxed

由於@kleopatra音符,簡單的教程執行不符合兩個基本性判據:

  • null值衛隊。

  • 返回模型生命週期中相同的值。

+0

我換行值在resultment陳述爲真。它也可以工作。 – Alify

+0

有趣的是,微妙的不正確的解決方案往往有時會傳播;-)將我最近的評論複製到@Reimnus的回答中,提出了類似的問題:a)要求其類的值至少應該被防範爲空b)類可能巧妙地違反了TableModel的合同:類在模型的生命週期中必須相同,如果值已更改,則不能保證 – kleopatra

+0

@Alify當我假設第一列的_content_錯誤不是布爾人?所以你的錯誤在其他地方,你的原始方法(關於專欄類)是和是正確的:-) – kleopatra

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

我這樣做,它的工作原理