当前位置: 首页 > 知识库问答 >
问题:

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

莫典
2023-03-14

我目前正在创建一个购物车模拟程序。主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。摆动JList[,0,0344x326,布局=java.awt.BorderLa….

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

-购物车项目

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

-项目列表

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个答案

黄意智
2023-03-14

您将JList本身添加到签出篮中,这没有意义:

checkoutBasket.addElement(list);

这是javax。摆动JList[,0,0344x326,layout=java.awt.BorderLa…显示有东西正在显示JList的表示形式,很可能是您的结帐篮。

关于

每个项目增加5.5,而不考虑其实际值

我认为您当前的代码没有显示发生这种情况的原因,您可能希望创建并发布mcve。

其他想法:

  • 不要使用字符串来表示价格,而是考虑一个数字字段,如果您想精确计算货币,可以使用BigDecimal
  • 你看起来把你的观点和你的模型混合得太多了。尽量将它们分开,也就是说,您应该有更多的非GUI类,包括一个表示购物篮的类和任何其他名词
 类似资料:
  • 问题内容: 我已经为Employee类的父类是抽象的并且父类中的clone()方法是抽象的编写了此克隆方法。我想用此代码复制Employee对象的原始数据类型,而不是复制每个原始数据单独键入,但是此代码在我调用clone()方法的行中有问题。(此代码在Employee类中) 错误是:来自对象类型的方法clone()不可见。 但是我的Employee类在类层次结构中,可以访问Object类中受保护的

  • 这是一个骇人听闻的问题:爱丽丝是一个幼儿园老师。她想给班上的孩子们一些糖果。所有的孩子坐成一行(他们的位置是固定的),每个人根据他(她)在班上的表现有一个评级分数。爱丽丝想给每个孩子至少一颗糖。如果两个孩子挨着坐,那么评分较高的那一个必须得到更多的糖果。爱丽丝想省钱,所以她需要尽量减少给孩子们的糖果总数。 测试数组:n=10,n个元素为[2 4 2 6 1 7 8 9 2 1]。我得到的答案是18

  • 我有一个关于书库的问题...我想写一个有3个堆栈的程序,我想在每个堆栈上添加这些操作(我应该使用数组): 1.创建堆栈2。按3号。流行音乐4号。显示每个堆栈的顶部 我写的程序,但我遇到了这些错误: 错误4错误LNK2019:未解析的外部符号“public:int\u thiscall stack::IsFull2(void)”(?IsFull2@stack@@QAEHXZ)在函数“public:v

  • 问题内容: 我有一个单击按钮时执行的功能。假设有一个循环将1到10加到。我将该数据添加到中。它完美地工作,并且数字相加。然后我在循环中添加了一个。但是输出是不同的。我想每秒增加1个元素。但是现在它等待10秒,并在第10秒结束时将所有1到10加在一起。我在哪里错了? 问题答案: 您应该在单独的线程中更新列表,否则最终将阻塞事件分发线程。 请尝试以下操作:

  • 我是GraphQL的新手,我正试图做一个突变来从我的数据库中删除一篇文章,但我不知道如何删除。我使用Node.js,猫鼬和GraphQL。 这是我的模式的变异。 这是我在调用API删除文章时使用的查询。 我做错了什么? 我收到一个错误的400请求。消息:“无法查询类型为“变异”的字段“删除”

  • 尝试在每周一8:15运行时间表,我尝试了以下表达式: 我想这意味着: 分钟数:15 小时:8 月日:每隔 月份:每 星期几:仅周一 年份:每 文件:http://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html