2015-03-24 6 views
-1

Я создаю симуляцию корзины покупок со списком продуктов, которые я хочу добавить вместе, и покажу итог, поскольку они добавляются в корзину корзины (реализованы как jlist).Как я могу рассчитать сумму всех элементов в моем JList?

В моем основном классе у меня есть кнопка с прослушивателем действий, чтобы принимать предметы из моего склада и добавлять их в корзину.

scanBtn.addActionListener(new ActionListener() { 
        @Override 
        public void actionPerformed(ActionEvent evt) { 
         checkoutBasket.addElement(productList.getSelectedValuesList()); 
        } 
       }); 

Кроме того у меня есть JTextField установить ниже корзины, которую я хочу, чтобы динамически обновлять с общей стоимостью, как добавить элементы в корзину. Мой вопрос: как я могу это сделать? Спасибо.

   cartTotalField = new JTextField(); 
       getContentPane().add(cartTotalField); 
       cartTotalField.setBounds(581, 441, 233, 28); 

Корзина товара Класс:

import java.io.*; 

public class CartItem implements Serializable { 

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

    public CheckoutItem() { 

    } 

    public CheckoutItem (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; 
    } 
} 
+1

Петля через все выходы Элементы в корзине. – camickr

ответ

2

В вашем actionPerformed, вы могли бы сделать что-то вроде этого (конечно, это очень наивный подход, чтобы получить его, вы могли бы придумать что-то лучше на это):

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

ОБНОВЛЕНИЕ: В общем, вам следует рассмотреть возможность добавления проверок и/или обработки исключений для числовых преобразований. Хорошей идеей было бы также изменить ценовое свойство на double (или int, соответствующим образом изменив приведенный выше код) в вашем классе CartItem.

+0

Привет, Ник! Спасибо за помощь. При попытке добавить элементы я получаю сообщение об ошибке - Исключение в потоке «AWT-EventQueue-0» java.lang.NumberFormatException: empty String. Есть идеи ? – user4702874

+0

Я предполагаю, что ошибка исходит из строки 'double oldCartValue = Double.parseDouble (cartTotalField.getText());', поскольку у вас есть пустой cartTotalField. Вы должны сделать проверки, чтобы не вызывать метод анализа с неверно отформатированной строкой. Я соответствующим образом обновлю ответ. Подумайте об этом, если хотите. –

+0

Привет. Большое спасибо. Еще одна проблема, сканирование одного элемента в корзину приведет к отображению суммы всех элементов в списке инвентаря, а не только одного элемента, который я пытаюсь выполнить. Он также напечатает строку под именем элемента как таковую 'javax.swing.JList [, 0,0,344x326, layout = java.awt.BorderLa ...'. Как я могу обойти эту проблему? – user4702874

Смежные вопросы