使用数据库数据在DefaultTableModel中插入复选框

时间:2018-03-31 11:30:52

标签: java swing jtable jcheckbox defaulttablemodel

我在NetBeans中使用DefaultTableModel来显示MySQL数据库中的记录。我的数据能够显示,但我想要的是在表格的末尾显示一个复选框列。

我知道它需要被覆盖,但我不知道如何以及从何处开始。我从互联网上看到了大量的例子,但他们使用的是静态字符串数据,而不是数据库。到现在为止,我仍然没有得到它。非常感谢帮助。

以下是我的示例代码。

  try { 
     conn = DatabaseConnect.connect();
     ps = conn.prepareStatement("SELECT productID, name, quantity, price, checked FROM tbl_inventory");
     rs = ps.executeQuery();
     jTable2.setModel(DbUtils.resultSetToTableModel(rs));   
  } catch(SQLException ex) {
  }

jTable2能够显示tbl_inventory的记录。 "检查"我的数据库表tbl_inventory中的列的默认布尔值为0.但我不知道如何在JTtable中将其显示为复选框。

1 个答案:

答案 0 :(得分:1)

  

"已检查"我的数据库表tbl_inventory中的列的默认布尔值为0.但我不知道如何在JTtable中将其显示为复选框。

最简单的方法是转换"已检查"创建TableModel时,数据为布尔值。然后将使用默认的渲染器/编辑器。

jTable2.setModel(DbUtils.resultSetToTableModel(rs));   

这意味着您无法使用上述方法。您需要自己复制数据并在选中的列上进行转换。

结帐Table From DataBase。最后一个示例Table From Database Example显示了如何在不进行任何转换的情况下复制数据。

您需要使用以下内容修改代码:

while (rs.next())
{
    Vector<Object> row = new Vector<Object>(columns);

    for (int i = 1; i <= columns; i++)
    {
        if (i == ?) // convert checked column
        {
            int value = rs.getInt(i);
            row.addElement( value == 0 ? Boolean.FALSE : Boolean.TRUE );
        }
        else
            row.addElement( rs.getObject(i) );
    }

    data.addElement( row );
}