当 JCheckBox 由表模型生成时初始化它们

发布于 2024-08-20 05:30:42 字数 174 浏览 5 评论 0原文

在 Java Swing 中,我创建了一个 JTable,它使用扩展 DefaultTableModel 的表模型类。由于表中一行的值是布尔类型,因此这些值显示为复选框。由于我想向这些复选框添加“项目侦听器”类,因此我确实需要初始化每个复选框。但是如果这些是表模型自动创建的怎么办?

In Java Swing I have created a JTable which uses a table model class which extends DefaultTableModel. As the values of one row of the table are of boolean type, these are displayed as check-boxes. As I want to add to these check-boxes 'item listeners' classes, I do need to initialize each of these check-boxes. But how do I do if these are automatically created by the table model?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

三生殊途 2024-08-27 05:30:42

由于这些复选框更改了基础数据,因此添加 TableModelListener 并对该列的 tableChanged 事件做出反应。

jTable1.getModel().addTableModelListener(new TableModelListener() {
    final int YOUR_BOOLEAN_COLUMN = 1;
    public void tableChanged(TableModelEvent e) {
        if(e.getColumn() == YOUR_BOOLEAN_COLUMN) {
            // get value from model (not affected if user re-orders columns)
            TableModel tableModel = jTable1.getModel();
            Boolean value =
                (Boolean)tableModel.getValueAt(e.getFirstRow(), YOUR_BOOLEAN_COLUMN);
            System.out.println(value);
        }
    }
});

As these CheckBoxes change the underlying data, it should be sufficient to add a TableModelListener and react to tableChanged events of that column.

jTable1.getModel().addTableModelListener(new TableModelListener() {
    final int YOUR_BOOLEAN_COLUMN = 1;
    public void tableChanged(TableModelEvent e) {
        if(e.getColumn() == YOUR_BOOLEAN_COLUMN) {
            // get value from model (not affected if user re-orders columns)
            TableModel tableModel = jTable1.getModel();
            Boolean value =
                (Boolean)tableModel.getValueAt(e.getFirstRow(), YOUR_BOOLEAN_COLUMN);
            System.out.println(value);
        }
    }
});
花开雨落又逢春i 2024-08-27 05:30:42

简而言之,您无法将 ActionListener 添加到表中的 JCheckbox,原因有两个:

  1. 在默认设置下,单个 JCheckbox 用于呈现所有复选框单元格。
  2. 包含 JCheckBox 的表格单元格上的鼠标单击不会传递到复选框,而是被表格吸收。

我认为重要的是要问为什么您需要这些活动?您给出的答案将反映应采取的最佳方法。

如果您希望允许用户编辑复选框的状态,最好的方法可能是重写 TableModel.isCellEditable(int, int) 为复选框列返回 true,然后简单地更新原始数据当 TableModel 更新时。

The short answer is you can't add ActionListeners to the JCheckboxes in the table for two reasons:

  1. With the default setup, a single JCheckbox is used to render all checkbox cells.
  2. Mouse clicks on the table cell containing the JCheckBox are not passed on to the checkbox, they are absorbed by the table.

I think it's important to ask why you need these events? The answer you give will reflect the best approach to take.

If you want to allow the user to edit the state of the checkboxes, your best approach may be to override TableModel.isCellEditable(int, int) to return true for the Checkbox columns and then simply update original data as the TableModel is updated.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文