2016-04-11 16 views
0

totalOrderedLabelを更新しようとしています。オーダーリストからアイテムを削除すると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); 

オーダーリスト/方法は、合計金額を追加します。

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を追加することです。更新時には、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内totalPriceが

に更新されますように、私のtotalOrderedLabelを更新しようとしていると新しい商品をリストに追加するとどうなりますか?どちらの場合も、リストのすべてのアイテムを繰り返し処理し、ラベルを更新するという概念が同じです。

リストの項目が変更されたときに通知を受ける必要があります。 ListModelListDataListenerを追加します。次に、イベントが生成されると、リスト内の残りのアイテムをすべて反復処理し、合計を再計算してJLabelを更新します。

実例と詳細については、How to Write a ListDataListenerのSwingチュートリアルのセクションを参照してください。

関連する問題