Java 正在尝试更新总订单列表

Java 正在尝试更新总订单列表,java,swing,Java,Swing,我正在尝试更新我的totalOrderedLabel,以便当我从orderList中删除项目时,totalOrderedLabel中的totalPrice将被更新 移除按钮 JButton removeButton = new JButton("remove"); removeButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {

我正在尝试更新我的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);
全序标签

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);
我正在尝试更新我的totalOrderedLabel,以便当我从orderList中删除项目时,totalOrderedLabel中的totalPrice将被更新

那么当你在列表中添加一个新项目时呢?在这两种情况下,概念是相同的,您迭代列表中的所有项目,然后更新标签

因此,当列表中的项目发生更改时,需要通知您。将
ListDataListener
添加到
ListModel
中。然后在生成事件时,迭代列表中的所有剩余项,重新计算总数,然后更新JLabel


阅读Swing教程中关于的部分,了解工作示例和更多信息。

IMO最好的方法是使OrderedFoodList
可观察
,然后为依赖它的所有图形字段添加
Observer
s。更新时,请记住使用SwingUtilities.invokeLater(Runnable)@LydiaRichardson,您遇到的确切问题是什么?您知道如何设置JLabel的文本吗?您知道如何遍历JList并合计所有值吗?您似乎在“下订单”按钮中执行所有这些逻辑。那么“删除”按钮有什么不同呢?为什么你不和你的兄弟一起解决这个问题呢:当你在使用它时,提醒你的兄弟在你得到帮助时开始接受答案。