简体   繁体   中英

ArrayIndexOutOfBoundException when adding cell values to a JTable

在此输入图像描述

As above screenshot;

When user selects Item and Item Name and click Add button, below scenarios happen:

  1. The selected Item,Item Name and cost retrieves from the MySQL database.
  2. Show Input Dialog to get qty from the user.
  3. After clicking OK to qty Input Dialog, Show Input Dialog to get Discount.
  4. After clicking OK to discount Input Dialog,the total is calculated and shows in the total Column.

But then shows the ArrayIndexOutOfBound error as:

java.lang.ArrayIndexOutOfBoundException: 1>=1

Then after selecting another Item and Item Name and doing the above process shows same error as:

java.lang.ArrayIndexOutOfBoundException: 2>=2 

Also reset Qty, Discount, Total columns to be equal as the last row values.

Add button action performed method;

private void add_btnActionPerformed(java.awt.event.ActionEvent evt) {                                        
        int i=0;
        int j=0;
        String temp = (String) IDcombo.getSelectedItem();
        String temp2 = (String) Namecombo.getSelectedItem();

        String sql = "select ItemID,ItemName,CostPrice from druginfo where ItemID=?";
    try {   
        pst=conn.prepareStatement(sql);
        pst.setString(1, temp);

        rs=pst.executeQuery();

        addDataToTable(tableSale,DbUtils.resultSetToTableModel(rs));//this method for adding multiple lines in the table


        IDcombo.setSelectedItem(null);
        Namecombo.setSelectedItem(null);
        exptxt.setText(null);
        instock.setText(null);

      //getting user input for selling qty 
        String Qty=JOptionPane.showInputDialog("Insert Selling Quantity :");
        double sellingqty=Double.parseDouble(Qty);

      //getting user input for specific item discount
        String discount = JOptionPane.showInputDialog("Insert Item Discount");
        double idiscount=Double.parseDouble(discount);

       for(j=0;j<100;j++){
           double icost =(double) tableSale.getModel().getValueAt(j,2); 
        System.out.println(icost);

      //calculating Gross Total  
        double grosstotal = (sellingqty*icost)-idiscount;

        System.out.println(grosstotal);

        for(i=0;i<100;i++){
         //setting qty input value to table sale  
        tableSale.getModel().setValueAt(sellingqty,i, 3);
        //setting input value to table sale  
        tableSale.getModel().setValueAt(idiscount,i, 4); 
        //setting grosstotal value to table sale
        tableSale.getModel().setValueAt(grosstotal,i, 5); 
        }

       }


    } catch (Exception ex) {
       JOptionPane.showMessageDialog(null, "error "+ex);
        ex.printStackTrace();
    }
}  

This is the Stack Trace;

java.lang.ArrayIndexOutOfBoundsException: 1 >= 1
at java.util.Vector.elementAt(Vector.java:474)
at javax.swing.table.DefaultTableModel.setValueAt(DefaultTableModel.java:664)
at com.bit.project.Newsale.add_btnActionPerformed(Newsale.java:720)

java.lang.ArrayIndexOutOfBoundsException: 2 >= 2
at java.util.Vector.elementAt(Vector.java:474)
at javax.swing.table.DefaultTableModel.setValueAt(DefaultTableModel.java:664)
at com.bit.project.Newsale.add_btnActionPerformed(Newsale.java:720)

remove for loop and use this code

int i = jTable1.getRowCount()-1;
double icost = (double) tableSale.getModel().getValueAt(i, 2);
System.out.println(icost);

//calculating Gross Total  
double grosstotal = (sellingqty * icost) - idiscount;

System.out.println(grosstotal);

//setting qty input value to table sale  
tableSale.getModel().setValueAt(sellingqty, i, 3);
//setting input value to table sale  
tableSale.getModel().setValueAt(idiscount, i, 4);
//setting grosstotal value to table sale
tableSale.getModel().setValueAt(grosstotal, i, 5);

java.lang.ArrayIndexOutOfBoundsException: 1 >= 1 mean there is only one row but you are accessing 1st index row that mean 2nd row .but there is no a 2nd row.you add new rows that's true but when you call getValueAt() the cell should exist

in my code

int i = jTable1.getRowCount()-1; 

int i will get the last row index for example if there is only 1 row then i is 0 .so to get value from current row use getValueAt(i, 2); .same to setValueAt();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM