2016-03-22 7 views
0

JTableにデータを追加すると、データを追加し続けると5列目(つまり数量)を合計する必要があり、合計をJLabelに表示する必要があります。Javaスイングでデータを追加し続けると、テーブルからの合計値

取得スレッドで例外以下 "AWT-EventQueueの-0" java.lang.ArrayIndexOutOfBoundsException:1> = 1

このコードで
private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {          
     //fetching data from textfield and adding to tblList. 
     DefaultTableModel model = (DefaultTableModel) tblList.getModel(); 
     int no = tblList.getRowCount(); 

     List<String> list = new ArrayList<String>(); 

     list.add(Integer.toString(no + 1)); 
     list.add(txtName.getText()); 
     list.add(txtManufacturer.getText()); 
     list.add(txtGroup.getText()); 
     list.add(txtQty.getText()); 

     model.addRow(list.toArray()); 
     no++; 

     totalProducts(); 

     clearText(); 
    } 


public void totalProducts() { 
     int row = tblList.getRowCount(); 

     //fetching the 4th column data(i.e quantity) and adding till data exits. 
     for (int i = 0; i < row; i++) { 
      total = Integer.parseInt(tblList.getModel().getValueAt(row, 4).toString()); 
      totalQty = totalQty + total; 
     } 

     System.out.println("total = " + totalQty); 

     lblTotal.setText(String.valueOf(totalQty)); 
    } 
+0

このコードを実行するとどうなりますか?何かエラーがありますか? – rdonuk

+0

スレッド「AWT-EventQueue-0」で例外が発生しています。java.lang.ArrayIndexOutOfBoundsException:1> = 1 –

答えて

0
for (int i = 0; i < row; i++) { 
      total = Integer.parseInt(tblList.getModel().getValueAt(row, 4).toString()); 
      totalQty = totalQty + total; 
     } 

あなたは行を使用しますgetValueAt(row, 4)があります。getValueAt(i, 4)?あなたのループではiを一切使用しないでください。"行"インデックスは条件に基づいて配列の外側にあります。

例えば

int row = tblList.getRowCount(); //returns 10 

最終インデックスは9になる場合、あなたはあなたのループで10たびにアクセスします。

関連する問題