Я изучаю 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, чтобы этот тип продуктов отображался на этикетке в виде изображения в сетке, соответствующего выбранному типу, поэтому либо бургер, либопицца на первом пустом ярлыке.
Как можно было бы подать заявку?