본문 바로가기
JAVA

ItemListener로 햄버거 주문하기

by 소힌 2022. 1. 4.

import java.awt.FlowLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;

class Buttons extends JFrame {

	private int price;
	public int menuprice;
	private int count;

	public Buttons() {
		super("버튼 연습하기");

		JPanel west = new JPanel();
		west.setLayout(new BoxLayout(west, BoxLayout.Y_AXIS));

		JRadioButton bulgogi = new JRadioButton("불고기버거 : 2000원");

		JRadioButton chicken = new JRadioButton("치킨 버거 : 3000원");

		JRadioButton shirimp = new JRadioButton("새우 버거 : 2500원");

		JPanel east = new JPanel();
		east.setLayout(new BoxLayout(east, BoxLayout.Y_AXIS));

		JCheckBox pickle = new JCheckBox("피클 추가 300원 ");

		JCheckBox cheese = new JCheckBox("치즈 추가 1000원 ");

		JCheckBox drink = new JCheckBox("음료 추가 500원 ");

		JPanel south = new JPanel(new FlowLayout());
		JLabel sum = new JLabel("총 갯수 0개 ");
		JLabel totalprice = new JLabel("결제 금액 0원");

		ItemListener item = new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				System.out.println("이벤트 발생");
				int state = e.getStateChange();
				Object source = e.getSource();

				if (source == bulgogi) {
					menuprice = 2000;

				} else if (source == chicken) {
					menuprice = 3000;

				} else if (source == shirimp) {
					menuprice = 2500;

				} else if (source == pickle) {
					menuprice = 300;

				} else if (source == cheese) {
					menuprice = 1000;

				} else if (source == drink) {
					menuprice = 500;

				}

				if (state == ItemEvent.SELECTED) {
					count++;
					price += menuprice;

				} else if (state == ItemEvent.DESELECTED) {
					count--;
					price -= menuprice;

				}
				sum.setText("총 갯수 : " + String.valueOf(count) + "개");
				totalprice.setText("결제할 금액 " + String.valueOf(price) + "원");

			}

		};

		bulgogi.addItemListener(item);
		shirimp.addItemListener(item);
		chicken.addItemListener(item);
		pickle.addItemListener(item);
		cheese.addItemListener(item);
		drink.addItemListener(item);

		ButtonGroup btnGroup = new ButtonGroup();
		btnGroup.add(bulgogi);
		btnGroup.add(shirimp);
		btnGroup.add(chicken);

		west.add(bulgogi);
		west.add(chicken);
		west.add(shirimp);

		east.add(pickle);
		east.add(cheese);
		east.add(drink);

		south.add(sum);
		south.add(totalprice);

		add(west, "West");
		add(east, "East");
		add(south, "South");

		setSize(350, 200);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
	}

}

public class ButtonTest {
	public static void main(String[] args) {
		new Buttons().setVisible(true);
	}
}

1. 처음에 하단의 레이블 값을 바꾸는 것만 ItemListener를 사용하고 

각각 메뉴의 값을 설정하는 것은 ActionListener를 사용했는데

자꾸 다음 버튼을 눌렀을때 값이 변경이 되어서 각 메뉴 가격도 ItemListener에 넣어주었더니 내가 원한 대로 되었다

 

2. 왜일까 ㅠㅠ?