java - JTable Multiarray 中复选框值的 setValueAt

标签 java swing multidimensional-array checkbox jtable

我目前在 JTable 中的复选框设置值时遇到问题。 我需要将每个复选框的 boolean 值存储在表的行中。 我可以显示默认(假)复选框,但是一旦单击复选框,就会出现异常; java.lang.ArrayIndexOutOfBoundsException:0。 我不太熟悉带有 boolean 值的多数组,我似乎无法弄清楚我的代码的哪一部分是不正确的。

public static final int CHECKBOX= 0;
private final List<Data> datas;
private static boolean CHECKBOX_RENDERED[][] = new boolean[][]{};
private static Arrays array = null;

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
    if (rowIndex >= this.datas.size()) {
        return null;
    }

    Data theData= this.datas.get(rowIndex);
    if (theData== null) {
        return null;
    }

    //Initialize the boolean field with table dimension
    CHECKBOX_RENDERED = new boolean[datas.size()][columnIndex];

    switch(columnIndex) {
    case CHECKBOX:
        array.fill(CHECKBOX_RENDERED[rowIndex], false);
        return false; //default
    default:
        throw new IllegalArgumentException("Invalid column index");
    }
}


@Override
public void setValueAt(Object value, int row, int column) {
    if (column == CHECKBOX) {
        Data data= this.datas.get(row);
        if (data!= null && value instanceof Boolean) {

            if (CHECKBOX_RENDERED[row][column]) {
                CHECKBOX_RENDERED[row][column] = false;
            } else {
                CHECKBOX_RENDERED[row][column] = true;
            }

            fireTableCellUpdated(row, column);
        }
    }
}

最佳答案

private static boolean CHECKBOX_RENDERED[][] = new boolean[][]{};

您定义了一个二维数组变量,但从未实际定义数组的行和列的大小。因此,数组的大小为 (0, 0),并且您无法添加/更改数组中的任何数据。

不要创建自己的表格模型。

最简单的解决方案是仅使用DefaultTableModel。它将为您管理数据。您只需定义表格中所需的行数/列数,它将为您管理其余部分。

或者,如果您不知道需要多少行数据,则可以使用 addRows(...) 方法根据需要动态添加行。

关于java - JTable Multiarray 中复选框值的 setValueAt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50102799/

相关文章:

c - "void foo(int q[][4]){}"中的 q 是什么类型?使用 "void foo(int q[6][4]){}"与前者有何不同?

java - 带有复选框的动态 ListView 问题?

java - 如何调整图标大小?

c# - 将锯齿状数组转换为列表

java - 不使用绘图清除 JFrame(图形 g)

java - 为什么实时输出到 JTextArea 不显示?

c++ - 如何在 C++ 中制作数字顺时针旋转的二维数组?

Java类问题

java - 为什么我的嵌套 for 循环不显示 Hello World 2

Java 集合和内存使用