[英]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.