这个方法有什么问题 - (在Jlist中添加元素)?

时间:2015-03-24 22:11:09

标签: java swing methods jlist

我目前正在创建购物车模拟程序。主GUI包含两个列表,一个是产品列表或库存。 (存储在.dat文件中的产品,在启动时自动加载)另一个是空白的,用于模拟我的购物篮。我们的想法是能够将库存中的物品扫描到结帐篮子中。在发生这种情况时,我希望我创建一个文本字段,以便使用购物篮中所有商品的成本动态更新。

以下是我的扫描按钮的方法,它应该执行上述操作:

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

目前,扫描该项目会将其添加到列表中,但会在总计中打印出奇怪的结果。 (每个项目增加5.5,无论其实际值如何**)。它还会在项目名称下打印一行javax.swing.JList[,0,0,344x326,layout=java.awt.BorderLa... .

以下是我的CartItem和ItemList的类,如果它们可能有帮助的话。谢谢。

-Cart Item

import java.io.*;

public class CartItem implements Serializable {

    private String barcodeNo;
    private String itemName;
    private String price;

    public CartItem() {

    }

    public CartItem (String barno, String in, String cost) {
            barcodeNo = barno;
            itemName = in;
            price = cost;
    }

    public String getBarcodeNo(){
        return barcodeNo;
    }

    public String getItemName(){
        return itemName;
    }

    public void setitemName(String itemName){
            this.itemName = itemName;
        }

    public String getPrice(){
        return price;
    }


    public String toString(){
        return barcodeNo + ": " + itemName + ", " + price;
    }

    public Object getID() {
        // TODO Auto-generated method stub
        return null;
    }
}

-ItemList

import javax.swing.DefaultListModel;

public class ItemList extends DefaultListModel {
    public ItemList(){
        super();
    }
public void addCartItem(String barcodeNo, String itemName, String price){
    super.addElement(new CartItem(barcodeNo, itemName, price));
}

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

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

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

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

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

}

1 个答案:

答案 0 :(得分:3)

您已将 JList本身添加到结帐篮子中,这没有用:

checkoutBasket.addElement(list);

这,javax.swing.JList[,0,0,344x326,layout=java.awt.BorderLa... .显示某些内容正在显示JList的toString()表示,可能是您的结帐篮子。


关于,

  

为每个项目添加5.5,无论其实际值如何

我不认为您当前的代码显示了这种情况发生的原因,您可能想要创建并发布mcve

其他想法:

  • 不要使用字符串来表示价格,而是考虑一个数字字段,如果你想要准确的话可能是BigDecimal。
  • 您希望将您的视图与模型混合得太多。尽量让它们尽可能分开,这意味着你应该有一些非GUI类,包括一个代表购物篮的名词,以及任何其他名词。