2016-04-11 5 views
0

Ich versuche mein totalOrderedLabel zu aktualisieren, so dass, wenn ich ein Element aus der orderList entferne der Gesamtpreis innerhalb der totalOrderedLabel aktualisiert wird.Ich versuche, die gesamte Bestellliste zu aktualisieren

Schaltfläche Entfernen

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); 

ORDER/Methode um den Gesamtpreis zu addieren.

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 Label-

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

Der beste Weg, IMO zu machen, wäre, OrderedFoodList 'Observable' zu ​​erstellen, dann' Observer' für alle grafischen Felder hinzuzufügen, die davon abhängen. Denken Sie bei der Aktualisierung daran, SwingUtilities.invokeLater (Runnable) zu verwenden. – ControlAltDel

+0

@LydiaRichardson, Und was ist das genaue Problem, das Sie haben? Weißt du, wie man den Text eines JLabel setzt? Wissen Sie, wie Sie die JList durchlaufen und alle Werte zusammenfassen? Sie scheinen all diese Logik in Ihrem "Place Order" -Button zu machen. Was ist also anders an der Schaltfläche "Entfernen"? – camickr

+0

Warum arbeiten Sie und Ihr Bruder nicht zusammen, um das Problem zu lösen: http://stackoverflow.com/questions/36509153/trying-to-create-a-remove-button-which-removes-items-from-a- Liste/36509400 # 36509400 Und während Sie daran erinnern Ihren Bruder zu beginnen, Antworten zu akzeptieren, wenn Sie Hilfe bekommen. – camickr

Antwort

0

Ich versuche, meine totalOrderedLabel zu aktualisieren, so dass, wenn ich ein Element aus der Bestellliste entfernen die Totalprice im totalOrderedLabel

aktualisiert werden

Und Was ist, wenn Sie der Liste ein neues Objekt hinzufügen? In beiden Fällen ist das Konzept dasselbe, Sie durchlaufen alle Elemente in der Liste und aktualisieren dann das Etikett.

Sie müssen also benachrichtigt werden, wenn sich Einträge in der Liste ändern. Fügen Sie ListDataListener zu ListModel hinzu. Wenn das Ereignis generiert wird, durchlaufen Sie alle verbleibenden Elemente in der Liste und berechnen die Gesamtsumme neu und aktualisieren dann das JLabel.

Lesen Sie den Abschnitt aus dem Swing-Tutorial auf How to Write a ListDataListener für ein funktionierendes Beispiel und weitere Informationen.

Verwandte Themen