Как добавить элемент в список массивов при использовании кнопки ActionListener и GUI? - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть школьное задание, в котором я должен создать java GUI и добавить пиццу в список массивов. Список массивов находится в отдельном Order классе. Я впервые использую GUI в Java, поэтому я все еще пытаюсь разобраться.

Проблема в том, что если я инициализирую класс заказа во время события нажатия кнопки, каждый раз, когда я нажимаю кнопку «добавить пиццу в заказ», он воссоздает класс заказа и список массивов и запускается заново. Если я инициализирую класс порядка вне события нажатия кнопки, он не распознается в методе события нажатия.

Я также безуспешно пытался инициализировать класс в методе main. Я опубликую основной метод класса ниже. Имейте в виду, что есть также класс Order и класс Pizza.

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

// Creating the FirstGUI class to hold the main method and GUI code
public class FirstGUI extends JFrame implements ActionListener {

    // Labels to give directions to the customer
    public JLabel labelSelectPizzaSize = new JLabel("Please Select a Size for Your Pizza: [S]mall, [M]edium, or [L]arge");
    public JLabel labelSelectPizzaCrust = new JLabel("Please Select a Crust Type: [Thick] or [Thin]");
    public JLabel labelHasPepperoni = new JLabel("Do You Want Pepperoni? [Y]es or [N]o");
    public JLabel labelTotalBakeTime = new JLabel("Total Bake Time: ");
    public JLabel labelOrderTotal = new JLabel("Order Total: ");

    // Text boxes for customer input
    public JTextField textEnterPizzaSize = new JTextField(5);
    public JTextField textEnterPizzaCrust = new JTextField(5);
    public JTextField textHasPepperoni = new JTextField(5);

    // Button to add pizza to order
    public JButton buttonAddPizzaToOrder = new JButton("Add Pizza to Order");

    // Main method
    public static void main(String[] args) {

        // Creating a new class instance
        new FirstGUI();
    }

    FirstGUI() {

        // Setting visibility to true
        this.setVisible(true);

        // Setting the default close operation
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Creating panels
        JPanel panelMain = new JPanel();
        JPanel panelPizzaSize = new JPanel();
        JPanel panelPizzaCrust = new JPanel();
        JPanel panelPizzaTopping = new JPanel();
        JPanel panelButtons = new JPanel();
        JPanel panelOrderInfo = new JPanel();

        // Setting the layout for the ain panel
        panelMain.setLayout(new BoxLayout(panelMain, BoxLayout.Y_AXIS));

        // Adding ActionListner to the "Add Pizza To Order" button.
        buttonAddPizzaToOrder.addActionListener(this);

        // Adding labels, text fields, and buttons to the panels and then adding panels to the main panel.
        panelPizzaSize.add(labelSelectPizzaSize);
        panelPizzaSize.add(textEnterPizzaSize);
        panelPizzaCrust.add(labelSelectPizzaCrust);
        panelPizzaCrust.add(textEnterPizzaCrust);
        panelPizzaTopping.add(labelHasPepperoni);
        panelPizzaTopping.add(textHasPepperoni);
        panelButtons.add(buttonAddPizzaToOrder);
        panelMain.add(panelPizzaSize);
        panelMain.add(panelPizzaCrust);
        panelMain.add(panelPizzaTopping);
        panelMain.add(panelButtons);
        panelOrderInfo.add(labelTotalBakeTime);
        panelOrderInfo.add(labelOrderTotal);
        panelMain.add(panelOrderInfo);

        // I'm not sure what this does.
        this.getContentPane().add(panelMain);

        // Setting size of the main panel.
        this.setSize(475, 250);
    }

    // Method to create a pizza and add it to the array list when the "Add Pizza To Order" button is pressed.
    public void actionPerformed(ActionEvent event1) {
        try {
            String a;
            String b;
            String c;

            a = textEnterPizzaSize.getText().toUpperCase();
            b = textEnterPizzaCrust.getText().toUpperCase();
            c = textHasPepperoni.getText().toUpperCase();

            Order O = new Order();
            O.addPizza(new Pizza(a, b, c));

            labelTotalBakeTime.setText("Total Bake Time: " + Double.toString(O.calculateBakeTime()));
            labelOrderTotal.setText("-  Order Total: " + Double.toString(O.calculateCost()));

            // Conformation message when a pizza is added to the order.
            JOptionPane.showMessageDialog(null, "Size: " + a + ", Crust: " + b + ", Pepperoni: " + c,
                    "Pizza Successfully Added To Order", JOptionPane.INFORMATION_MESSAGE);
        }
        // Exception and ERROR message handling
        catch (MyException me) {
            JOptionPane.showMessageDialog(null, me, "ERROR", JOptionPane.ERROR_MESSAGE);
        }
    }
}

1 Ответ

0 голосов
/ 18 апреля 2020

Попробуйте этот подход,

Добавьте переменную класса для хранения вашего заказа

private Order order;

Затем

public static void main( String[] args )
{

    // Creating a new class instance
    Order order = new Order(); // Create order here
    new FirstGUI( order );  // Pass the order to the constructor
}

Инициализируйте порядок внутри конструктора

FirstGUI( Order order )
{
    this.order = order;
    // other remaining code
}

В методе actionPerformed добавьте pizze в этот порядок

order.addPizza( new Pizza( a, b, c ) );
...