java - 在jtable中添加jcheckbox

标签 java swing jtable jcheckbox

我目前正在开发一个考勤系统,我将在其中使用 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);
    }
}

最佳答案

首先,您对发布的代码有各种各样的问题:

  1. 变量名称不应以大写字符开头。有些是正确的,有些则不然。保持一致并遵循 Java 约定

  2. 方法名称不应以大写字符开头。再次遵循 Java 约定。

  3. 为什么要将“DefaultTableModel”作为参数传递给该方法。你永远不会使用该变量。如果不需要,请删除该参数!

  4. 无需调用updateUI()。该方法在外观发生更改时在内部调用。当模型添加到表中时,JTable 将重新绘制自身。

  5. 你调试过 while 循环吗?我不相信它会起作用。使用 DBUtils 时,它将循环遍历 ResultSet 以将数据添加到 TableModel。因此,当您执行该代码时,您已经位于结果集的末尾。

  6. 无论如何,我不明白您试图用循环做什么。所有数据已添加到 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/

相关文章:

java - Java 发生了什么变化,导致教程示例不再准确?

java - Swing : storing the selected values from List into an array.

java - 通过 java.awt.Font 删除线

java - dataModelUpdate 后自动排序 JTable

java - 使用 cdi 注入(inject)缓存实例

java - Java 相当于 C 的 fflush? [读取值时出现问题]

java - 如何根据变量创建对象引用变量

java - 我需要在 Jtree 中添加 "right click popup "选项

java - 如何防止选择 JTable 顶部新添加的元素?