在 jtable 中添加 jcheckbox
Add jcheckbox in jtable
我目前正在开发一个考勤系统,我将在其中使用 jTable 并在其中添加 jCheckbox。但是,我不知道该怎么做。
我应该怎么做才能在我的 jTable 中添加 jCheckBox。我的 jTable 中的数据是从数据库中获取的。
我试过使用此代码,但 table 没有显示我数据库中的数据,而且上面仍然没有复选框。
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()
。该方法在外观发生变化时在内部调用。当模型添加到 table.
时,JTable 将重新绘制自身
你调试过 while 循环吗?我不相信它会起作用。使用 DBUtils 时,它将遍历 ResultSet 以将数据添加到 TableModel。因此,当您执行该代码时,您已经在 ResultSet 的末尾。
无论如何我不明白你想用循环做什么。所有数据都已添加到 TableModel。我不知道您为什么要尝试添加更多行。
but the table doesn't show the data from my database
嗯,这是你的第一步。显示数据库中的数据,忘记自定义 renderer/editor。一次解决一个问题。
一旦显示了数据,仍然没有理由使用自定义 renderer/editor,因为 Swing 已经提供了默认值。问题是您需要将 JTable 的 getColumnClass(...)
方法覆盖为每列的 return Class,以便 table 可以选择合适的 renderer/editor专栏。
有关如何执行此操作的示例,请参阅:
我目前正在开发一个考勤系统,我将在其中使用 jTable 并在其中添加 jCheckbox。但是,我不知道该怎么做。
我应该怎么做才能在我的 jTable 中添加 jCheckBox。我的 jTable 中的数据是从数据库中获取的。
我试过使用此代码,但 table 没有显示我数据库中的数据,而且上面仍然没有复选框。
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()
。该方法在外观发生变化时在内部调用。当模型添加到 table. 时,JTable 将重新绘制自身
你调试过 while 循环吗?我不相信它会起作用。使用 DBUtils 时,它将遍历 ResultSet 以将数据添加到 TableModel。因此,当您执行该代码时,您已经在 ResultSet 的末尾。
无论如何我不明白你想用循环做什么。所有数据都已添加到 TableModel。我不知道您为什么要尝试添加更多行。
but the table doesn't show the data from my database
嗯,这是你的第一步。显示数据库中的数据,忘记自定义 renderer/editor。一次解决一个问题。
一旦显示了数据,仍然没有理由使用自定义 renderer/editor,因为 Swing 已经提供了默认值。问题是您需要将 JTable 的 getColumnClass(...)
方法覆盖为每列的 return Class,以便 table 可以选择合适的 renderer/editor专栏。
有关如何执行此操作的示例,请参阅: