在JTable中选择行时索引错误

时间:2013-10-27 02:07:30

标签: java swing select jtable

我有一个弹出菜单可以删除JTable中的多行。 该表有一个具有布尔值(true / false)的列。如果此列的值为true,则将删除此行。 但索引数组被选中是错误的。 示例:选择索引为2,3,4的行,但结果为0,2,3。始终选择第一行。 如果选择没有条件的多行,结果是正确的。

任何人都可以帮助我?

这是示例代码(使用Netbeans):

private void menuDeleteLOANActionPerformed(java.awt.event.ActionEvent evt) {                                               
        int[] rows = this.tabMAIN.getSelectedRows();
        try {           
            for(int i = rows.length-1; i >= 0; i--){
                boolean temp = ((Boolean)this.tabMAIN.getValueAt(i, 8)).booleanValue();
                if(temp == true){
                    System.out.println("ID "+this.tabMAIN.getValueAt(i, 3)+((Boolean)this.tabMAIN.getValueAt(i, 8)).booleanValue());
                }else{
                     System.out.println("ID "+this.tabMAIN.getValueAt(i, 3)+((Boolean)this.tabMAIN.getValueAt(i, 8)).booleanValue());
                }
             }          
        } catch (Exception ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }               

2 个答案:

答案 0 :(得分:2)

您没有访问数组的值。这应该更正确:

private void menuDeleteLOANActionPerformed(java.awt.event.ActionEvent evt) {                                               
        int[] rows = this.tabMAIN.getSelectedRows();
        try {           
            for(int i = rows.length-1; i >= 0; i--){
                boolean temp = ((Boolean)this.tabMAIN.getValueAt(rows[i], 8)).booleanValue();
                if(temp == true){
                    System.out.println("ID "+this.tabMAIN.getValueAt(rows[i], 3)+((Boolean)this.tabMAIN.getValueAt(rows[i], 8)).booleanValue());
                }else{
                     System.out.println("ID "+this.tabMAIN.getValueAt(rows[i], 3)+((Boolean)this.tabMAIN.getValueAt(rows[i], 8)).booleanValue());
                }
             }          
        } catch (Exception ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }   

答案 1 :(得分:1)

尝试将行索引转换为模型索引

 for (int z = 0; z < tblQue1.getRowCount();) {

                if ((Boolean) tblQue1.getValueAt(z, 4) == true) {

                    dmQue1.removeRow(tblQue1.convertRowIndexToModel(z));
                } else {
                    z++;
                }
            }