【问题标题】:Wrong index when select rows in JTable在 JTable 中选择行时索引错误
【发布时间】:2013-10-27 02:07:30
【问题描述】:

我有一个弹出菜单可以删除JTable 中的多行。 该表有一列带有布尔值(真/假)。如果该列的值为真,将删除该行。 但是选择的索引数组是错误的。 示例:选择索引为 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);
        }
    }               

【问题讨论】:

  • 如果您没有尽快获得帮助,请考虑创建并发布sscce,您可以在其中将您的代码压缩成仍然可以编译和运行的最小位,没有外部依赖项(例如需要链接到数据库或图像),没有与您的问题无关的额外代码,但仍能演示您的问题。
  • 您可能混淆了视图和模型坐标,提到了here

标签: java swing select jtable


【解决方案1】:

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

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);
        }
    }   

【讨论】:

    【解决方案2】:

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

     for (int z = 0; z < tblQue1.getRowCount();) {
    
                    if ((Boolean) tblQue1.getValueAt(z, 4) == true) {
    
                        dmQue1.removeRow(tblQue1.convertRowIndexToModel(z));
                    } else {
                        z++;
                    }
                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-16
      • 2011-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-30
      • 2023-03-24
      • 2015-08-03
      相关资源
      最近更新 更多