1

テーブルモデルに 3 行あります。各行には 9 列 (o-8) が含まれています。すべての行の最後の列を更新したいのですが、1 行目の最後の列しか更新できません。

   ` 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) {

                }
          });   
4

2 に答える 2

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 のみを更新します。

于 2012-09-07T06:51:49.340 に答える
1

上記のコメントで述べた観察結果を要約することにしました。

あなたのコードにはいくつかの問題がありました

  • あなたが呼び出す同じループサイクルで、サイクルのバリアントが不変になるため、ループは無限になります(すでに修正済みですi++i=i-1
  • あなたはまだ電話していtm.getValueAt(0,8)ます。最初のパラメータはrowIndex、2 番目のパラメータはcolumnIndexです。したがって、反復ごとに、現在の行ではなく、最初の行で作業します。
  • Java は通常、モデルと配列を から0にインデックス付けしlength - 1ますが、 から まで反復しlengthます1iしたがって、変数を下げる必要があります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 );
    }
    
于 2012-09-07T07:05:17.733 に答える