2014-02-17 171 views
0

在此图片中,返回表头值显示在复选框中。如何在jtable中动态设置jcheckbox

这里JTable中值从数据库

我尝试过,但ClassCastException异常发生,因为转换为字符串

布尔值,我不知道为什么会出现错误

enter image description here

这是我的代码

static Object[][] data; 
String[] colName = {"Book", "Member", "Issue Date", "Return Date ", 
     "Remark","Return" }; 

List<Issue>issues=ServiceFactory.getIssueServiceImpl().findAllIssue(); 
data=new Object[issues.size()][6]; 


for(Issue issue:issues){ 

    data[i][0]=issue.getMemberId().getName(); 
    data[i][1]=issue.getBookId().getName(); 
    data[i][2]=issue.getIssueDate(); 
    data[i][3]=issue.getReturnDate(); 
    data[i][4]=issue.getRemark(); 
    data[i][5]=issue.getStatus(); 

    i++; 
} 

这里出现异常

DefaultTableModel dtm = new DefaultTableModel(data, colName);{ 
    public Class getColumnClass(int c) { 
     switch (c) { 
      case 0: return Boolean.class; 
      default: return String.class; 
     } 
     } }; 
retunTable = new JTable(); 
retunTable.setModel(dtm); 
retunTable.getTableHeader().setReorderingAllowed(false); 


return retunTable; 

如果你知道关于这个请分享答案在这里...

编辑

 DefaultTableModel dtm = new DefaultTableModel(data, colName);{ 
    public Class getColumnClass(int c) { 
     switch (c) { 
      case 0: return Boolean.class; 
      default: return String.class; 
     } 
     } }; 

    dtm .addRow(data); 
retunTable = new JTable(); 
retunTable.setModel(dtm); 
retunTable.getTableHeader().setReorderingAllowed(false); 


return retunTable; 
+1

您将需要实现表格单元格渲染器。 – Sanjeev

+0

您应该为您提供JTable的自定义单元格渲染器。请查看http://docs.oracle.com/javase/tutorial/uiswing/components/table.html中的'ColorRenderer'类 –

+0

'issue.getStatus()'返回什么?一个'String'或一个'boolean'? – MadProgrammer

回答

5

从你的例子和代码,这看起来我错了......

DefaultTableModel dtm = new DefaultTableModel(data, colName);{ 
    public Class getColumnClass(int c) { 
     switch (c) { 
      case 0: return Boolean.class; 
      default: return String.class; 
     } 
    } 
}; 

是不是列0“书” ......以上importantanly,issue.getMemberId().getName()

它不应该是...

DefaultTableModel dtm = new DefaultTableModel(data, colName);{ 
    public Class getColumnClass(int c) { 
     return c == 5 ? Boolean.class : String.class 
    } 
}; 

第5列是“返回”吗?

4

你需要的是使用单元格编辑器为您的JTable的细胞。您可以为列使用DefaultCellEditor,并使用将JTextField作为输入参数的构造函数。

例如,如果你的表的第2列需要一个文本字段,那么你可以做这样的事情:

TableColumn col2 = returnTable.getColumnModel().getColumn(1); 
col2.setCellEditor(new DefaultCellEditor(new JTextField())); 

有关详细说明See Oracle's tutorial for Table cell Editors

希望这有助于。