【问题标题】:Initializing JCheckBoxes when they are generated by a Table Model当 JCheckBox 由表模型生成时初始化它们
【发布时间】:2010-02-01 16:45:05
【问题描述】:

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

【问题讨论】:

    标签: java swing listener jcheckbox tablemodel


    【解决方案1】:

    由于这些 CheckBox 更改了基础数据,因此添加 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);
            }
        }
    });
    

    【讨论】:

      【解决方案2】:

      简短的回答是您不能将 ActionListeners 添加到表中的 JCheckboxes 中,原因有两个:

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

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

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

      【讨论】:

        猜你喜欢
        • 2010-11-10
        • 2018-07-08
        • 1970-01-01
        • 1970-01-01
        • 2012-10-10
        • 2020-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多