簡體   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