如何动态地将JCheckBox添加到从MySQL数据库检索到JTable的每一行

时间:2016-07-10 13:07:55

标签: java mysql swing jtable jcheckbox

我的JTable数据库中有数据。我想从数据库动态地向每行添加复选框。我稍后将使用这些复选框删除从数据库中检查的行。我知道如何从数据库中删除,但如何从数据库中添加复选框?任何人在此之前完成此任务请帮助。我是一个尝试学习它的Java爱好者。示例代码可以帮助我了解如何执行此操作。

以下代码用于更新我的JTable

public void UpdateTable() {

    try {

        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/"
                + "employee_certificate", "root", "");

        String sql = "SELECT certificate.Number, staff.Emp_Id, staff.Emp_Name, "
                + "staff.Department,  certificate.Cert_Code, certificate.Cert_Name,\n"
                + "certificate.Vendor, certificate.Date_Taken, "
                + "certificate.Expiry_Date FROM staff LEFT JOIN certificate"
                + " ON staff.Emp_Id=certificate.Emp_Id ORDER BY staff.Emp_Name\n";

        PreparedStatement pstmt = con.prepareStatement(sql);
        ResultSet rs = pstmt.executeQuery();
        jTable1.setModel(DbUtils.resultSetToTableModel(rs));
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, e);
    }
}

2 个答案:

答案 0 :(得分:2)

从这个完整的example开始,我进行了以下更改以获得以下结果。特别是,

  • Row获得了一个属性Boolean checked,取代了String name

  • 默认renderer使用getColumnClass()Boolean.class返回Row.checked时的复选框。

  • 在相应的JDBC和SQL中,checked属性的类型为boolean

image

$ diff Original.java WorkerTest.java 
48c48
<         String name;
---
>         Boolean checked;
91c91
<                     return row.name;
---
>                     return row.checked;
105a106,116
>         @Override
>         public Class<?> getColumnClass(int colIndex) {
>             switch (colIndex) {
>                 case 0:
>                     return Integer.class;
>                 case 1:
>                     return Boolean.class;
>             }
>             return null;
>         }
> 
114c125
<                         r.name = rs.getString(2);
---
>                         r.checked = rs.getBoolean(2);
138c149
<             st.execute("create table city(id integer, name varchar2)");
---
>             st.execute("create table city(id integer, checked boolean)");
143,144c154
<                 ps.setString(2, (char) ('A' + r.nextInt(26))
<                     + String.valueOf(r.nextInt(1_000_000)));
---
>                 ps.setBoolean(2, Boolean.valueOf(r.nextBoolean()));

答案 1 :(得分:1)

问题是DBUtils会返回完整的TableModel

最简单的方法是不使用DBUtils并自行将ResultSet中的数据加载到TableModel

代码并不困难,您可以使用Table From Database中的Table From Database Example作为起点。

代码只是将ResultSet中的数据加载到Vectors中,因此您可以手动添加另一列以包含布尔数据。

代码的(两个)更改类似于:

//  Get column names

for (int i = 1; i <= columns; i++)
{
    columnNames.addElement( md.getColumnName(i) );
}

columnName.addElement( "Check Mark" ); // added

//  Get row data

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

    for (int i = 1; i <= columns; i++)
    {
        row.addElement( rs.getObject(i) );
    }

    row.addElement( Boolean.FALSE ); // added
    data.addElement( row );
}