Java 如何在jtable中动态设置jcheckbox

Java 如何在jtable中动态设置jcheckbox,java,swing,jtable,jcheckbox,defaulttablemodel,Java,Swing,Jtable,Jcheckbox,Defaulttablemodel,在本图中,返回表标题值显示在复选框中 这里jtable来自数据库的值 我试过了,但是由于布尔值转换为字符串,发生了classcastexception 我不知道为什么会发生那个错误 这是我的密码 static Object[][] data; String[] colName = {"Book", "Member", "Issue Date", "Return Date ", "Remark","Return" }; List<Issue>issues=Se

在本图中,返回表标题值显示在复选框中

这里jtable来自数据库的值

我试过了,但是由于布尔值转换为字符串,发生了classcastexception

我不知道为什么会发生那个错误

这是我的密码

    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++;
}
如果你知道这一点,请在这里分享答案

编辑


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

例如,如果表的第2列需要是文本字段,则可以执行以下操作:

TableColumn col2 = returnTable.getColumnModel().getColumn(1);
col2.setCellEditor(new DefaultCellEditor(new JTextField()));
请详细解释


希望这有帮助。

从您的示例和代码来看,我觉得这是错误的

DefaultTableModel  dtm = new DefaultTableModel(data, colName);{
    public Class getColumnClass(int c) {
        switch (c) {
            case 0: return Boolean.class;
            default: return String.class;
        }   
    } 
};
不是第0列的书。。。或者更重要的是,issue.getMemberId.getName

不应该是

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

第5列返回的位置?

您需要实现表格单元格渲染器。您应该为JTable提供自定义单元格渲染器。请在issue.getStatus返回什么内容中查看ColorRenderer类?字符串还是布尔值?@MadProgrammer issue.getStatus是一个布尔值那么TableModel的getColumnClass方法为列返回了错误的类类型。。。
DefaultTableModel  dtm = new DefaultTableModel(data, colName);{
    public Class getColumnClass(int c) {
        switch (c) {
            case 0: return Boolean.class;
            default: return String.class;
        }   
    } 
};
DefaultTableModel  dtm = new DefaultTableModel(data, colName);{
    public Class getColumnClass(int c) {
        return c == 5 ? Boolean.class : String.class
    } 
};