Что не так с этим методом - (Добавление элементов в Jlist)?

1

В настоящее время я занимаюсь созданием программы моделирования корзины покупок. Основной графический интерфейс пользователя содержит два списка, один из которых представляет собой список продуктов или инвентаря. (продукты, хранящиеся в файле.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 Пункт

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
    Перестаньте задавать и удалять вопросы: я дал вам тот же ответ, когда вы задали тот же самый вопрос 3 часа назад: stackoverflow.com/questions/29242444/… . Это НЕ первый раз, когда вы задали и удалили вопрос. Очень неприятно тратить время на помощь и дать вам ответ. Я не только потратил впустую свое время, но вы потратили впустую время всех остальных, кто читал этот вопрос.
  • 1
    @camickr: Нам не нужно такого поведения на этом сайте, так как это нечестно по отношению к добровольцам, которые пытаются помочь. Спасибо за предупреждение.
Показать ещё 1 комментарий
Теги:
methods
swing
jlist

1 ответ

3
Лучший ответ

Вы добавляете JList к корзине выписки, и это не имеет смысла:

checkoutBasket.addElement(list);

Это, javax.swing.JList[,0,0,344x326,layout=java.awt.BorderLa.... показывает, что что-то отображает представление toString() JList, вероятно, вашу корзину проверки.


Что касается,

Добавляет 5.5 для каждого элемента независимо от их фактического значения

Я не думаю, что ваш текущий код показывает, почему это происходит, и вы можете захотеть создать и опубликовать mcve.

Другие мысли:

  • Не используйте String для представления цены, а скорее рассмотрите числовое поле, возможно, BigDecimal, если вы хотите быть точным за деньги.
  • Вы слишком много смешаете свое мнение с вашей моделью. Постарайтесь, чтобы они были как можно более раздельными, то есть у вас, скорее всего, есть еще несколько классов без GUI, в том числе один для представления корзины покупок и любых других существительных.
  • 0
    Здравствуй. Спасибо за быстрый ответ. Как бы я решил это?
  • 1
    @ user4702874: Я не знаю вашей проблемы достаточно хорошо, чтобы полностью ответить на нее, поскольку в вашем вопросе есть пробелы. Попробуйте объяснить больше о том, что вы пытаетесь сделать. Но в целом вы должны работать над созданием лучшей модели без графического интерфейса, которая могла бы работать с вашим графическим интерфейсом.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню