在我的Jtable中,我有一个列,其布尔值显示为复选框。 我只能在值为true时才能检索值单元格,当值为false时,我无法读取值。 我写了我的代码:
int row = jTMezziInt.getRowCount();
int h=0;
while (h<=row){
chk= ((Boolean)jTMezziInt.getValueAt(h, 6)).booleanValue();
//if chk is true I can read;
// if chk is false the execution stopped at the chk assignement;
if (chk)
((DefaultTableModel )this.jTMezziInt.getModel()).removeRow(h);
row = jTMezziInt.getRowCount();
h=h+1;
}
TableColumn Selez = jTMezziInt.getColumnModel().getColumn(6);
}
为了定义表,我使用了netbeas和表编辑器。
感谢大家的帮助;
答案 0 :(得分:2)
我可以看到,这里有两个可能的问题之一。最可能的问题是你从h = 0开始然后以h = row结束(因为你的while循环迭代而h&lt; = row)。
比如说你的表中有3行。此循环现在将运行h = 0,h = 1,h = 2和h = 3,即它运行4次但您只有3行(索引为0,1和2,没有索引为3的行)。这将在其最后一次迭代中导致空指针异常。这是你看到的行为吗?
要对其进行排序,只需使你的while循环条件为h&lt;行,而不是h&lt; =行。如果这不起作用,请告诉我,我们可以讨论另一个可能的问题。
另一个问题是,即使要检查的行被删除,您仍然会增加h。如果我们检查第1行然后删除第1行,那么第2行将成为第1行,因此我们需要重新检查这个新行1.因此,如果您检查的当前行未被删除,则只应增加h。
最后,请注意,如果您使用的是后面的JDK之一,则无需调用booleanValue()(这称为不必要的取消装箱)。这将自动为您完成。所以你可以改变以下内容:
chk= ((Boolean)jTMezziInt.getValueAt(h, 6)).booleanValue();
为:
chk= (Boolean)jTMezziInt.getValueAt(h, 6);
它只是整洁和更好的风格。