如何计算 JList 元素的总和?

How to calculate total sum of JList elements?

我正在创建一个购物车模拟,其中包含一个产品列表作为我的库存,一个列表用作用户可以将商品扫描到其中的购物车。理论上,这是在将项目添加到购物车时将总成本显示为列表下方的 JTextField 中的项目。

要扫描项目我有以下方法:

public void actionPerformed(ActionEvent evt) {
  //Get the newly added list values.
  JList list = productList.getSelectedValuesList();
  double totalAddedValue = 0.0;
  double oldCartValue    = 0.0;

  //Iterate to get the price of the new items.
  for (int i = 0; i < list.getModel().getSize(); i++) {
    CartItem item = (CartItem) list.getModel().getElementAt(i);
    totalAddedValue += Double.ParseDouble(item.getPrice());
  }

  //Set total price value as an addition to cart total field.

  //cartTotalField must be accessible here.
  string cartFieldText = cartTotalField.getText();

  //Check that cartTextField already contains a value.
  if(cartTextField != null && !cartTextField.isEmpty())
  {
    oldCartValue = Double.parseDouble(cartFieldText);
  }

  cartTotalField.setText(String.valueOf(oldCartValue  + totalAddedValue));
  checkoutBasket.addElement(list);
}

目前我的主要问题是,将一件商品扫描到购物车中会显示库存列表中所有商品的总和,而不仅仅是我要扫描的一件商品。它还将在项目名称下打印一行 javax.swing.JList[0,0,344x326,layout=java.awt.BorderLa... 。我该如何解决这个问题?

物品列表Class

public class StockList extends DefaultListModel {
    public StockList(){
        super();
}

public void addItem(String barcodeNo, String itemName, String price){
    super.addElement(new Item(barcodeNo, itemName, price));
}

public Item findItemByName(String name){
    Item temp;
    int indexLocation = -1;
    for (int i = 0; i < super.size(); i++) {
        temp = (Item)super.elementAt(i);
        if (temp.getItemName().equals(name)){
            indexLocation = i;
            break;
        }
    }

    if (indexLocation == -1) {
        return null;
    } else {
        return (Item)super.elementAt(indexLocation);
    }
}

public Item findItemByBarcode(String id){
    Item temp;
    int indexLocation = -1;
    for (int i = 0; i < super.size(); i++) {
        temp = (CheckoutItem)super.elementAt(i);
        if (temp.getBarcodeNo().equals(id)){
            indexLocation = i;
            break;
        }
    }

    if (indexLocation == -1) {
        return null;
    } else {
        return (Item)super.elementAt(indexLocation);
    }        
}

public void Item(String id){
    Item empToGo = this.findItemByBarcode(id);
    super.removeElement(empToGo);
}

}

javax.swing.JList[,0,0,344x326,layout=java.awt.BorderLa... .

这是 JList 的 toString() 表示。 JList 默认渲染器只调用添加到 ListModel 的任何对象的 toString() 方法。

checkoutBasket.addElement(list);

不要将 JList 添加到结帐篮。您必须将列表中的每个项目分别添加到结账篮。