我目前正在创建购物车模拟程序。主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);
}
}
答案 0 :(得分:3)
您已将 JList本身添加到结帐篮子中,这没有用:
checkoutBasket.addElement(list);
这,javax.swing.JList[,0,0,344x326,layout=java.awt.BorderLa... .
显示某些内容正在显示JList的toString()
表示,可能是您的结帐篮子。
关于,
为每个项目添加5.5,无论其实际值如何
我不认为您当前的代码显示了这种情况发生的原因,您可能想要创建并发布mcve。
其他想法: