Обмен между панелями - PullRequest
       14

Обмен между панелями

0 голосов
/ 26 апреля 2018

Я изучаю Java, создавая небольшие проекты для удовольствия.Я довольно новичок в этом и легко застрял, отсюда и вопрос, который я задаю.

Я пытаюсь создать простую программу «Корзина для покупок», которая на главной панели имеет сетку 3х3, состоящую из пустых ярлыков, которые затем появляются.быть замененным изображениями.А справа от сетки находятся четыре кнопки: Добавить еду, Добавить напиток, Общая цена и Очистить все.Поэтому, когда нажата любая из первых двух кнопок, я хочу изменить текущую панель на панели, соответствующие кнопке, на которой была нажата.Затем на панели, которая отображается, есть данные, например, тип пищи в выпадающем списке, который отображает набор продуктов и их количество.Который затем, когда пользователь выбирает тип и количество, нажимает кнопку «Добавить», после чего панель возвращается на основную панель, а первая пустая метка теперь содержит изображение элемента, добавленного в корзину.

Это все, что я знаю в настоящее время, и насколько я могу получить.

Основной класс

public class ShoppingCart
{
    public ShoppingCart()
    {
        JFrame app = new JFrame("Cart");

        MainPanel main = new MainPanel();
        app.add(main);

        app.pack();
        app.setResizable(false);
        app.setLocationRelativeTo(null);
        app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        app.setVisible(true);
    }
    public static void main(String[] args)
    {
        new ShoppingCart();
    }
}

Класс MainPanel

public class MainPanel extends JPanel implements ActionListener
{
    private final JLabel labels[] = new JLabel[9]; 
    private final JButton button[] = new JButton[4]; 

    public MainPanel()
    {
        String buttonText[] ={"Add a Meal", "Add a Drink", "Total Price", "Clear All"};
        String buttonToolTipText[] =
        {"This will add food", "This will add drink", "This will display the price", "Clear the cart"};

        this.setLayout(new BorderLayout());

        JPanel buttonPanel = new JPanel();
        buttonPanel.setLayout(new GridLayout(4, 1, 2, 2));

        for (int i = 0; i < 4; i++)
        {
            button[i] = new JButton(buttonText[i]);
            button[i].setOpaque(true);
            button[i].setBackground(Color.WHITE);
            button[i].setFont(new Font("Ariel", Font.PLAIN, 18));
            button[i].setPreferredSize(new Dimension(150,50));
            button[i].setVisible(true);
            button[i].setToolTipText(buttonToolTipText[i]);
            button[i].addActionListener(this);
            buttonPanel.add(button[i]);
        }

        JPanel labelPanel = new JPanel(new GridLayout(3, 3, 2, 2));
        Border border = BorderFactory.createLineBorder(Color.GRAY); 
        for (int i = 0; i < 9; i++)
        {
            labels[i] = new JLabel();
            labels[i].setOpaque(true);
            labels[i].setVisible(true);
            labels[i].setPreferredSize(new Dimension(100, 100));
            labels[i].setBorder(border);
            labels[i].setBackground(Color.WHITE);
            labelPanel.add(labels[i]);
            //set empty label to the image of the type chose, 
            //if right clicked, show type and quantity chosen
        }
        add(labelPanel, BorderLayout.WEST);
        add(buttonPanel, BorderLayout.EAST);
    }

    @Override
    public void actionPerformed(ActionEvent e)
    {
        if(button[0] == e.getSource())
        {
            //Change panel to Meal panel
        }
        if(button[1] == e.getSource())
        {
            //Change panel to Drink panel
        }
        if(button[2] == e.getSource())
        {
            //JOptionPane to show total price
        }
        if(button[3] == e.getSource())
        {
            //Check whether labels are empty, if not clear them else display message
        }
    }
}

Класс MealPanel

public class MealPanel extends JPanel implements ActionListener
{
    public MealPanel()
    {
        this.setLayout(new BorderLayout());

        JPanel titlePanel = new JPanel();
        JPanel labelPanel = new JPanel(new GridLayout(2, 1, 3, 3));
        JPanel inputField = new JPanel(new GridLayout(2, 1, 3, 3));
        JPanel addCancel = new JPanel();

        JLabel title = new JLabel("Add a Meal");
        title.setBorder(BorderFactory.createMatteBorder(5,0,10,0, new Color(0,0,0,0)));
        titlePanel.add(title);

        JLabel type = new JLabel("Type:", JLabel.RIGHT);
        labelPanel.add(type);
        JLabel quantity = new JLabel("Quantity:", JLabel.RIGHT);
        labelPanel.add(quantity);

        final String arr[] = {"Burger", "Pizza"};
        JComboBox mealType = new JComboBox(arr);
        inputField.add(mealType);
        JTextField quant = new JTextField();
        inputField.add(quant);

        JButton add = new JButton("Add");
        add.addActionListener(this);
        addCancel.add(add);
        JButton cancel = new JButton("Cancel");
        cancel.addActionListener(this);
        addCancel.add(cancel);

        add(titlePanel, BorderLayout.NORTH);
        add(labelPanel, BorderLayout.WEST);
        add(inputField, BorderLayout.EAST);
        add(addCancel, BorderLayout.SOUTH);
    }

    @Override
    public void actionPerformed(ActionEvent e)
    {
       //If cancel is pressed, return back to main, nothing changed on this panel
       //else if add is pressed, set the type and quantity and return back to main
    }
}

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

Как можно было бы подать заявку?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...