2016-04-11 43 views
0

我想更新我的totalOrderedLabel,以便當我從orderList中刪除一個項目時,totalOrderedLabel中的totalPrice將被更新。試圖更新總訂單清單

刪除按鈕

JButton removeButton = new JButton("remove"); 
    removeButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
       int selectionNumber = orderList.getSelectedIndex(); 
       if (selectionNumber == -1) { 
        JOptionPane.showMessageDialog(MenuPage.this, "Remove Item"); 
       } else { 
        listOrder.removeElementAt(selectionNumber); 

        double totalPrice = 0.0; 
        for(Food food : OrderedFoodList) { 
         totalPrice = totalPrice + food.getPrice(); 
        } 

        totalOrderedLabel.setText("Total price: " + totalPrice); 
        OrderedFoodList.clear(); 
       } 
     } 

    }); 
    removeButton.setBounds(680, 189, 117, 29); 
    contentPane.add(removeButton); 

orderList /法加起來的總價格。

menulist listOrder = new menulist(); 
    orderList = new JList(listOrder); 

JButton orderBtn = new JButton(); 
    orderBtn.setText("Place Order"); 
    orderBtn.addActionListener(new ActionListener() { 

     public void actionPerformed(ActionEvent e) { 
      int selectionNumber = mealList.getSelectedIndex(); 
      if (selectionNumber == -1){ 
       JOptionPane.showMessageDialog(MenuPage.this, "Please select a meal"); 
      } else { 
       Food orderedMeal = (Food) mealList.getSelectedValue(); 

       JOptionPane.showMessageDialog(MenuPage.this, "You have ordered "  //clear the last order . find a code to do that 
         + orderedMeal + ""); 

       listOrder.addElement(orderedMeal); 

       double totalPrice = 0.0; 
       for(Food food : OrderedFoodList) { 
        totalPrice = totalPrice + food.getPrice(); 
       } 
       totalOrderedLabel.setText("Total price: " + totalPrice); 

       } 
     } 

    }); 
    orderBtn.setBounds(259, 189, 117, 29); 
    contentPane.add(orderBtn); 

totalOrdered標籤

totalOrderedLabel = new JLabel("Total Price"); 
    totalOrderedLabel.setBounds(697, 111, 142, 16); 
    contentPane.add(totalOrderedLabel); 

    totalCaloriesLabel = new JLabel("Total Calories"); 
    totalCaloriesLabel.setBounds(388, 205, 253, 16); 
    contentPane.add(totalCaloriesLabel); 
    } 

public void updateLabel(menulist model) { 

int selectionNumber = mealList.getSelectedIndex(); 
if (selectionNumber == -1){ 
    //JOptionPane.showMessageDialog(MenuPage.this, "Please select a meal"); 
} else { 
    Food menulist = (Food) mealList.getSelectedValue(); 
Food itemFood = (Food) ((menulist) model).getElementAt(selectionNumber); 

//Add new food to current order 
OrderedFoodList.add(itemFood); 
+1

做IMO最好的方法是製作OrderedFoodList'Observable',然後爲所有依賴它的圖形字段添加'Observer's。在更新時,請記住使用SwingUtilities.invokeLater(Runnable) – ControlAltDel

+0

@LydiaRichardson,你有什麼確切的問題?你知道如何設置JLabel的文本嗎?你知道如何迭代JList並總計所有值嗎?您似乎在「下訂單」按鈕中執行所有這些邏輯。那麼「刪除」按鈕有什麼不同? – camickr

+0

爲什麼你和你的兄弟不一起解決問題:http://stackoverflow.com/questions/36509153/trying-to-create-a-remove-button-which-removes-items-from-a-列表/ 36509400#36509400而當你在它提醒你的兄弟開始接受答案,當你獲得幫助。 – camickr

回答

0

我試圖更新我的totalOrderedLabel所以,當我從orderList的totalOrderedLabel內totalPrice將被更新

刪除項目,當你添加一個新的項目到列表中呢?在這兩種情況下,這個概念與遍歷列表中所有項目的概念相同,然後更新標籤。

因此,您需要在列表中的項目更改時收到通知。將添加到ListModel。然後,當生成事件時,您遍歷列表中的所有剩餘項目並重新計算總數,然後更新JLabel。

閱讀Swing教程中關於How to Write a ListDataListener的部分以獲取工作示例和更多信息。