【问题标题】:retrieve boolean values from jtable从 jtable 检索布尔值
【发布时间】:2011-02-13 23:01:23
【问题描述】:

在我的 Jtable 中,我有一列显示为复选框的布尔值。 只有当值为真时,我才能检索值单元格,当值为假时,我无法读取值。 我写我的代码:

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。

感谢大家的帮助;

【问题讨论】:

  • 在 chk 赋值时停止执行 听起来很奇怪,Java 永远不应该简单地停止除了 IO 之外的执行,使用 wait() 或类似的方法,或者抛出异常(仍然不是简单地停止)。也许值是 null 而不是 Boolean.TRUE 你认为它们应该是假的?

标签: java jtable


【解决方案1】:

据我所知,这里有两个可能的问题之一。最可能的问题是您从 h = 0 开始,然后以 h = row 结束(因为您的 while 循环迭代 while h

例如,您的表格中有 3 行。此循环现在将针对 h = 0、h = 1、h = 2 和 h = 3 运行,即它运行 4 次但您只有 3 行(索引为 0、1 和 2,没有索引为 3 的行)。这将在其最终迭代中导致空指针异常。这是您看到的行为吗?

要解决它,只需将您的 while 循环条件设为 h

另一个问题是即使您正在检查的行被删除,您仍然会增加 h。如果我们检查第 1 行,然后删除第 1 行,那么第 2 行将变为第 1 行,因此我们需要重新检查这个新的第 1 行。因此,如果您正在检查的当前行没有被删除,您应该只增加 h。

最后,顺便说一句,如果您使用的是较新的 JDK 之一,则无需调用 booleanValue()(这称为不必要的拆箱)。这将自动为您完成。因此,您可以更改以下内容:

chk= ((Boolean)jTMezziInt.getValueAt(h, 6)).booleanValue();

到:

chk= (Boolean)jTMezziInt.getValueAt(h, 6);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 2014-02-07
    • 1970-01-01
    相关资源
    最近更新 更多