gpt4 book ai didi

java - 将单元格值添加到 JTable 时出现 ArrayIndexOutOfBoundException

转载 作者:行者123 更新时间:2023-11-29 05:02:27 26 4
gpt4 key购买 nike

enter image description here

如上截图;

当用户选择项目和项目名称并单击添加按钮时,会发生以下情况:

  1. 从 MySQL 数据库中检索选定的项目、项目名称和成本。
  2. 显示输入对话框以获取用户的数量。
  3. 在点击确定数量输入对话框后,显示输入对话框以获得折扣。
  4. 点击确定关闭输入对话框后,计算总计并显示在总计列中。

但随后将 ArrayIndexOutOfBound 错误显示为:

java.lang.ArrayIndexOutOfBoundException: 1>=1

然后在选择另一个项目和项目名称并执行上述过程后显示与以下相同的错误:

java.lang.ArrayIndexOutOfBoundException: 2>=2 

同时将 Qty、Discount、Total 列重置为等于最后一行的值。

添加按钮 Action 执行方法;

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

这是堆栈跟踪;

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)

最佳答案

移除for循环并使用这段代码

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 表示只有一行,但您访问的是第一个索引行,这意味着第二行。但是没有第二行。您添加新行没错,但是当您调用 getValueAt() 时,单元格应该存在

在我的代码中

int i = jTable1.getRowCount()-1; 

int i 将获取最后一行索引,例如,如果只有 1 行,则 i 为 0。因此要从当前行获取值,请使用 getValueAt(i, 2);。与 setValueAt();

关于java - 将单元格值添加到 JTable 时出现 ArrayIndexOutOfBoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31637371/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com