我目前正在开发一个考勤系统,我将在其中使用 jTable 并添加 jCheckbox。但是,我不知道该怎么做。
我应该如何在我的 jTable 中添加 jCheckBox。我的jTable中的数据是从数据库获取的。
我已尝试使用此代码,但该表不显示我的数据库中的数据,并且仍然没有复选框。
public void Update_table(int Column, int ColumnBoolean, DefaultTableModel model) {
try {
String sql = "select * from student_info";
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
Attendance.setModel(DbUtils.resultSetToTableModel(rs));
Object[] files = new Object[Column];
while (rs.next()) {
for (int i = 1; i <= Column; i++) {
if (i == ColumnBoolean) {
files[ColumnBoolean - 1] = Boolean.FALSE;
} else {
files[i - 1] = rs.getObject(i - 1);
}
model.addRow(files);
}
Attendance.updateUI();
rs.close();
}
JCheckBox check = new JCheckBox();
Attendance.getColumnModel().getColumn(0).setCellEditor(new DefaultCellEditor(check));
Attendance.getColumnModel().getColumn(0).setCellRenderer(new DefaultTableCellRenderer());
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
}
最佳答案
首先,您对发布的代码有各种各样的问题:
变量名称不应以大写字符开头。有些是正确的,有些则不然。保持一致并遵循 Java 约定
方法名称不应以大写字符开头。再次遵循 Java 约定。
为什么要将“DefaultTableModel”作为参数传递给该方法。你永远不会使用该变量。如果不需要,请删除该参数!
无需调用
updateUI()
。该方法在外观发生更改时在内部调用。当模型添加到表中时,JTable 将重新绘制自身。你调试过 while 循环吗?我不相信它会起作用。使用 DBUtils 时,它将循环遍历 ResultSet 以将数据添加到 TableModel。因此,当您执行该代码时,您已经位于结果集的末尾。
无论如何,我不明白您试图用循环做什么。所有数据已添加到 TableModel 中。我不知道您为什么要尝试添加更多行。
but the table doesn't show the data from my database
这是你的第一步。显示数据库中的数据并忘记自定义渲染器/编辑器。一次解决一个问题。
一旦获得显示的数据,仍然没有理由使用自定义渲染器/编辑器,因为 Swing 已经提供了默认值。问题是您需要重写 JTable 的 getColumnClass(...) 方法来返回每列的类,以便表可以为该列选择合适的渲染器/编辑器。
有关如何执行此操作的示例,请参阅:Java, changing boolean column to checkbox in jTable when using rs2xml for populating jTable
关于java - 在jtable中添加jcheckbox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58788145/