作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前在 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/
我是一名优秀的程序员,十分优秀!