繁体   English   中英

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

[英]How to add JCheckBox dynamically to each row retrieved from MySQL database to JTable

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

从这个完整的示例开始 ,我进行了以下更改以获得以下结果。 尤其是,

  • Row被赋予一个Boolean checked的属性,替换了String name

  • getColumnClass()Row.checked返回Boolean.class时,默认渲染器使用复选框。

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

图片

$ 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()));

问题是DBUtils返回一个完整的TableModel

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

代码并不难,你可以使用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 );
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM