【问题标题】:Add jcheckbox in jtable [duplicate]在jtable中添加jcheckbox [重复]
【发布时间】:2019-11-10 11:20:41
【问题描述】:

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

【问题讨论】:

  • 我实际上对此一无所知。我不知道“矢量”和其他东西的功能是什么。
  • 有很多我们没有看到的程序。您应该考虑edit提出您的问题并包括short, self contained, correct (compilable), example。这样一来,这里的读者就更容易为您提供帮助。

标签: java swing jtable jcheckbox


【解决方案1】:

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

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

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

  3. 为什么要将“DefaultTableModel”作为参数传递给方法。你永远不会使用那个变量。不需要的参数去掉!

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

  5. 您是否调试过您的 while 循环?我不相信它会起作用。使用 DBUtils 时,它将循环通过 ResultSet 将数据添加到 TableModel。因此,当您执行该代码时,您已经在 ResultSet 的末尾。

  6. 无论如何,我不明白您试图对循环做什么。所有数据都已添加到 TableModel 中。我不知道您为什么要尝试添加更多行。

但是表格没有显示我数据库中的数据

这是你的第一步。显示数据库中的数据,忘记自定义渲染器/编辑器。一次解决一个问题。

一旦你得到显示的数据,仍然没有理由使用自定义渲染器/编辑器,因为 Swing 已经提供了默认值。问题是您需要覆盖 JTable 的 getColumnClass(...) 方法以返回每列的类,以便表可以为该列选择应用程序渲染器/编辑器。

有关如何执行此操作的示例,请参阅:Java, changing boolean column to checkbox in jTable when using rs2xml for populating jTable

【讨论】:

  • 谢谢先生,我设法将我的数据库内容显示到表格中。我想要的唯一结果是在表中添加列,其中有一个复选框。
  • @SydneyDelavin,要添加在数据库中找不到的布尔数据列,您可以查看:stackoverflow.com/questions/32445418/…
  • 感谢您提供的信息,先生。但是我只想问一个问题,代码TableModel utilsModel = DbUtils.resultSetToTableModel(rs); TableModel wrapperModel = new CheckBoxWrapperTableModel(utilsModel),"Select");出勤.setModel(wrapperModel);将我表上的每个列名更改为“选择”。我该如何解决这个问题?
  • @SydneyDelavin,我更新了链接中的代码,为测试提供了一个基本示例。首先测试该代码以确保其正常工作,然后从链接更新您的模型副本(以防我更改任何内容)。如果它对你不起作用,我不知道会出现什么问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-21
  • 1970-01-01
  • 2013-08-10
  • 2019-04-07
  • 1970-01-01
  • 2013-07-09
  • 1970-01-01
相关资源
最近更新 更多