我创建了一个程序,该程序允许用户选择餐厅的菜单项,并添加每个项的总数,从而为每个人创建一顿双餐。我还需要在每次输入新人(使用“下一个人”按钮)时添加每个进餐总数,以得出我作为ArrayList创建的tableTotal。我似乎无法让arraylist添加的不仅仅是最后一个人的餐总数。我需要它包含每个人的餐食总数,即如果有4个人,我的tableTotal ArrayList将包含4个唯一值。从这里开始,我将把tableTotal中的所有值相加,以得出整个表的双精度值。如何将每个人的meatTotal放到我的tableTotal ArrayList中的任何帮助将不胜感激!

这是主要的类:

import javax.swing.BoxLayout;
import javax.swing.JFrame;

public class MenuApp extends JFrame {

//    static JFrame frame;

public static void main(String args[]) {

    JFrame aFrame = new MenuApp();
    aFrame.setVisible(true);

}

public MenuApp() {

    setTitle("Leah Thompson's Restaurant App");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    Buttons buttonPanel = new Buttons();
    buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.Y_AXIS));

    setContentPane(buttonPanel);
    pack();


}
}


和Buttons类:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import java.util.ArrayList;

public class Buttons extends JPanel {

private final JTextField nameField;

String[] drinkChoice = {"Coke", "Beer", "Wine"};
String[] appChoice = {"Soup", "Salad", "Brie"};
String[] entreeChoice = {"Pasta", "Steak", "Burger"};
String[] dessertChoice = {"Tiramisu", "Cheesecake", "Chocolate Cake"};

JRadioButton[] drinkButtons = new JRadioButton[drinkChoice.length];
JRadioButton[] appButtons = new JRadioButton[appChoice.length];
JRadioButton[] entreeButtons = new JRadioButton[entreeChoice.length];
JRadioButton[] dessertButtons = new JRadioButton[dessertChoice.length];

ButtonGroup buttonGroupDrink = new ButtonGroup();
ButtonGroup buttonGroupApp = new ButtonGroup();
ButtonGroup buttonGroupEntree = new ButtonGroup();
ButtonGroup buttonGroupDessert = new ButtonGroup();

JButton mealCost;
JButton nextPerson;
JButton submitOrder;

ArrayList<Double> tableTotal = new ArrayList(0);

double mealTotal = 0;
double mealTotal1 = 0;

public Buttons(){

    ActionListener nameEntered = new NameEntered();
    add(new JLabel("Name (hit enter after typing name)"));
    nameField = new JTextField(10);
    add(nameField);
    nameField.addActionListener(nameEntered);

    ActionListener drinkSelection = new DrinkSelectionChangeMade();
    ActionListener appSelection = new AppSelectionChangeMade();
    ActionListener entreeSelection = new EntreeSelectionChangeMade();
    ActionListener dessertSelection = new DessertSelectionChangeMade();

    add(new JLabel("Choose a Drink"));
    for (int i = 0; i < drinkChoice.length; i++) {
        drinkButtons[i] = new JRadioButton(drinkChoice[i]);
        drinkButtons[i].getModel().setActionCommand(drinkChoice[i]);
        drinkButtons[i].addActionListener(drinkSelection);
        buttonGroupDrink.add(drinkButtons[i]);
        add(drinkButtons[i]);
//            if (i == 0) {
//                mealTotal = mealTotal + 2;
//            } else if (i == 1) {
//                mealTotal = mealTotal + 3;
//            } else {
//                mealTotal = mealTotal + 5;
//            }

    }

    add(new JLabel("Choose an Appetizer"));
    for (int i = 0; i < appChoice.length; i++) {
        appButtons[i] = new JRadioButton(appChoice[i]);
        appButtons[i].getModel().setActionCommand(appChoice[i]);
        appButtons[i].addActionListener(appSelection);
        buttonGroupApp.add(appButtons[i]);
        add(appButtons[i]);
//            if (i == 0) {
//                mealTotal = mealTotal + 6;
//            } else if (i == 1) {
//                mealTotal = mealTotal + 7;
//            } else {
//                mealTotal = mealTotal + 8;
//            }

    }

    add(new JLabel("Choose an Entree"));
    for (int i = 0; i < entreeChoice.length; i++) {
        entreeButtons[i] = new JRadioButton(entreeChoice[i]);
        entreeButtons[i].getModel().setActionCommand(entreeChoice[i]);
        entreeButtons[i].addActionListener(entreeSelection);
        buttonGroupEntree.add(entreeButtons[i]);
        add(entreeButtons[i]);
//            if (i == 0) {
//                mealTotal = mealTotal + 12;
//            } else if (i == 1) {
//                mealTotal = mealTotal + 20;
//            } else {
//                mealTotal = mealTotal + 10;
//            }

    }

    add(new JLabel("Choose a Dessert"));
    for (int i = 0; i < dessertChoice.length; i++) {
        dessertButtons[i] = new JRadioButton(dessertChoice[i]);
        dessertButtons[i].getModel().setActionCommand(dessertChoice[i]);
        dessertButtons[i].addActionListener(dessertSelection);
        buttonGroupDessert.add(dessertButtons[i]);
        add(dessertButtons[i]);
//            if (i == 0) {
//                mealTotal = mealTotal + 7;
//            } else if (i == 1) {
//                mealTotal = mealTotal + 6;
//            } else {
//                mealTotal = mealTotal + 5;
//            }

    }


    mealCost = new JButton("Total Cost of Meal");
    add(mealCost);
    ActionListener mealPrice = new MealCostPressed();
    mealCost.addActionListener(mealPrice);

    nextPerson = new JButton("Next Person");
    add(nextPerson);
    ActionListener next = new NextPersonPressed();
    nextPerson.addActionListener(next);

    submitOrder = new JButton("Submit Order");
    add(submitOrder);
    ActionListener submit = new SubmitPressed();
    submitOrder.addActionListener(submit);

    //tableTotal.add(mealTotal);
    //add(new JLabel("Your total is: " + mealTotal));

}

private class NameEntered implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e){
        String name = nameField.getText();
        System.out.println(name);
    }
}

 private class DrinkSelectionChangeMade implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        String drink = buttonGroupDrink.getSelection().getActionCommand();
        System.out.println(drink + " as a drink");
        if(drink == "Coke"){
            mealTotal = mealTotal + 1.95;
        }
        else if(drink == "Beer"){
            mealTotal = mealTotal + 2.95;
        }
        else{
            mealTotal = mealTotal + 4.95;
        }
    }
}

    private class AppSelectionChangeMade implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        String app = buttonGroupApp.getSelection().getActionCommand();
        System.out.println(app + " as an appetizer");
        if(app == "Soup"){
            mealTotal = mealTotal + 3.95;
        }
        else if(app == "Salad"){
            mealTotal = mealTotal + 4.95;
        }
        else{
            mealTotal = mealTotal + 7.95;
        }
    }
}

private class EntreeSelectionChangeMade implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        String entree = buttonGroupEntree.getSelection().getActionCommand();
        System.out.println(entree + " as an entree");
        if(entree == "Pasta"){
            mealTotal = mealTotal + 11.95;
        }
        else if(entree == "Steak"){
            mealTotal = mealTotal + 19.95;
        }
        else{
            mealTotal = mealTotal + 9.95;
        }
    }
}

private class DessertSelectionChangeMade implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
            String dessert = buttonGroupDessert.getSelection().getActionCommand();
            System.out.println(dessert + " as a dessert");
            if(dessert == "Tiramisu"){
            mealTotal = mealTotal + 6.95;
        }
        else if(dessert == "Cheesecake"){
            mealTotal = mealTotal + 5.95;
        }
        else{
            mealTotal = mealTotal + 4.95;
        }
            tableTotal.add(mealTotal);
    }
}
private class NextPersonPressed implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e){
      //removeAll();
      JFrame nextFrame = new MenuApp();
      nextFrame.setVisible(true);
      System.out.println("Next Customer: ");
    }
}

private class MealCostPressed implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e){

        JOptionPane.showMessageDialog(mealCost, mealTotal);
    }
}

private class SubmitPressed implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e){
        JOptionPane.showMessageDialog(nextPerson, "Thank you for your order. Please Exit Now.");
        System.out.println("The total cost for the table is: " + tableTotal);
    }
}

}

最佳答案

您的问题是您正在为每个人创建一个新的MenuApp对象,并且每个MenuApp对象都有自己的tableTotal字段。

可能的解决方案:


仅创建一个MenuApp对象,并为每个新人员更改其状态,也许是JLabel上的文本。
或者,如果您绝对必须为每个人创建一个新的MenuApp,则可以将其放置在模式JDialog(而不是JFrame)中,并在对话框完成时让调用代码查询其总数,然后将其添加到tableTotal领域。

08-05 09:41