从jtable中检索布尔值

时间:2011-02-13 23:01:24

标签: java jtable

在我的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和表编辑器。

感谢大家的帮助;

1 个答案:

答案 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);

它只是整洁和更好的风格。