如何更新表格模型多行列?

时间:2012-09-07 06:12:24

标签: java swing jtable tablemodel

我在tablemodel中有3行。每行包含9列(o-8)。我想更新每一行的最后一列...但是现在我只能更新第一行最后一列...请帮助......

   ` SAVE=new JButton("SAVE");
     SAVE.addActionListener(new java.awt.event.ActionListener() {  
      public void actionPerformed(java.awt.event.ActionEvent e) {  
      String Status=null ;
      DbUtility ViewAbsenties=new DbUtility();
      ViewAbsenties. loadDriver();
      ViewAbsenties.connect();
      TableModel tm;
      tm = table3.getModel();
      int i = table3.getRowCount();
      System.out.println("row count"+i);

          try{
            while(i!=0){
              Status   =(String) tm.getValueAt(0,8);
              String Employeeid = (String) tm.getValueAt(i,0);
              System.out.println("Status: " + Status);
              System.out.println("Employeeid: " + Employeeid);
              ViewAbsenties.executeUpdateQuery2(Status,Employeeid);
              System.out.println("i"+i);
               i=i-1;

                  }}
            catch (Exception e5) {

                }
          });   

2 个答案:

答案 0 :(得分:2)

你应该使用

Status   =(String) tm.getValueAt(i,8);
String Employeeid = (String) tm.getValueAt(i,0);

而不是

Status   =(String) tm.getValueAt(0,8);
String Employeeid = (String) tm.getValueAt(0,0);

getValueAt中的第一个参数是rowIndex,您应该传递要更新的行的索引,但只能在循环中更新第0行。

答案 1 :(得分:1)

我决定总结一下我在评论中提到的观察结果。

您的代码有几个问题

  • 在同一个循环周期中,你调用i++i=i-1,这使得循环的变量不变,所以你的循环是无穷的(你已经修复了)
  • 您仍然在呼叫tm.getValueAt(0,8)。第一个参数是rowIndex,第二个参数是columnIndex。因此,对于每次迭代,您仍然使用第一行,而不是使用当前行。
  • Java通常会将模型和数组从0索引到length - 1,但您将从length迭代到1。因此,您需要将变量i降低1

有固定代码:

int i = table3.getRowCount() - 1;
while( i >= 0 ){

          Status = (String) tm.getValueAt( i, 8 );
          String Employeeid = (String) tm.getValueAt( i, 0 );

          System.out.println( "Status: " + Status );
          System.out.println( "Employeeid: " + Employeeid );

          ViewAbsenties.executeUpdateQuery2( Status, Employeeid );

          System.out.println( "i" + i );
          i = i - 1;
}

注意: 无论如何,我有一些改进代码风格的观察结果:

  • 上面的示例是for周期
  • 的确切用例 基于Java约定变量名称的
  • 应以非大写字母开头。

    for ( int i = 0; i < table3.getRowCount(); ++i ) {
          status = (String) tm.getValueAt( i, 8 );
          String employeeid = (String) tm.getValueAt( i, 0 );
    
          System.out.println( "Status: " + status );
          System.out.println( "Employeeid: " + employeeid );
    
          ViewAbsenties.executeUpdateQuery2( status, employeeid );
    
          System.out.println( "i" + i );
    }