2015-03-24 76 views
1

我目前正在創建一個購物車模擬程序。主GUI包含兩個列表,一個是產品列表或清單。 (存儲在一個.dat文件中的產品,在啓動時自動加載)另一個是空白的,用於模擬我的購物籃。這個想法是能夠從我的庫存中掃描物品到結帳籃。在發生這種情況時,我想創建一個文本字段,以動態更新購物籃中所有商品的成本。這種方法有什麼問題 - (在Jlist中添加元素)?

下面是我的掃描按鈕,這是爲了進行上述活動的方法:

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項目

-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小時前詢問完全相同的問題時,我給了您相同的答案:http://stackoverflow.com/questions/29242444/how-to-calculate-total-sum-的-JList的元素/ 29242705#29242705。這不是您第一次詢問和刪除問題。花時間幫助並給你答案是非常令人沮喪的。我不僅浪費了時間,而且浪費了讀過這個問題的其他人的時間。 – camickr 2015-03-25 00:13:59

+1

@camickr:我們在這個網站上不需要這種行爲,因爲對那些試圖幫助的志願者來說是不公平的。謝謝你的提醒。 – 2015-03-25 00:26:01

+0

@camickr - 我誠摯向您道歉,氣墊船充滿了鰻魚。我的意圖是永遠不會浪費你的時間,我只是在尋找一個更詳細的答案,因爲我是初學者,並且仍然難以解決如何解決問題。我恢復了之前刪除的問題。 – user4702874 2015-03-25 13:36:26

回答

3

您要添加的JList的本身到退房籃子,那沒有意義:

checkoutBasket.addElement(list); 

這個,javax.swing.JList[,0,0,344x326,layout=java.awt.BorderLa... .表明有東西顯示JList的toString()表示,可能是您的結帳籃。


關於,

爲每個項目增加5.5不論其實際價值的

我不認爲當前的代碼顯示爲什麼發生這種情況,你可能想創建併發布mcve

其他的想法:

  • 不要使用字符串來表示的價格,但如果你想準確的錢,而考慮數字領域,也許BigDecimal的。
  • 你看起來是太多地混淆了你的觀點和你的模型。儘量讓它們儘可能地分開,也就是說,你應該有更多的非GUI類,包括一個來代表購物籃,以及任何其他名詞。
+0

嗨。謝謝你的迅速回應。我將如何解決這個問題? – user4702874 2015-03-24 22:20:09

+1

@ user4702874:我不太清楚你的問題是否能完全回答這個問題,因爲你的問題似乎有差距。考慮更多地解釋你想要做什麼。但總的來說,你應該努力製作一個更好的非GUI模型,可以與你的GUI一起工作。 – 2015-03-24 22:21:48

+0

嗨,我對最初的帖子進行了一些更改。謝謝。 – user4702874 2015-03-24 23:05:27