본문 바로가기
IT/Java

Java GUI (피자주문)

by hjshims 2021. 6. 24.

 

 

package p0624pizza;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;
import javax.swing.border.Border;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.border.LineBorder;
import javax.swing.border.MatteBorder;
import javax.swing.border.TitledBorder;

class Pizza extends JFrame {
	JPanel welcome = new JPanel();
	JPanel type = new JPanel();
	JPanel topping = new JPanel();
	JPanel size = new JPanel();
	JPanel button = new JPanel();

	JLabel lbl1;
	ButtonGroup group, group2;
	JRadioButton combo, potato, bulgogi;
	JCheckBox p, ch, pe, b;
	JRadioButton small, medium, large;
	JButton button1, button2;
	JTextField field1, field2;

	int price = 0;
	int total = 0;
	String str = "";

	public Pizza() { // 생성자
		setTitle("피자 주문");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(600, 200, 600, 700);

		showNorth(); // welcome
		showWest(); // type
		showCenter(); // topping
		showEast(); // size
		showSouth(); // button
		setVisible(true);
	}

	void showNorth() { // welcome
		// 중간 패널에 그룹 경계선 (Border 객체)
		Border border = BorderFactory.createTitledBorder("미스터 피자!");
		welcome.setBorder(border); // 생성한 객체를 사용하려면 setBorder로 쓰기
		
		lbl1 = new JLabel("미스터 피자에 오신것을 환영합니다.");
		welcome.add(lbl1);
		add("North", welcome);
		// add(welcome,BorderLayout.NORTH);		
	}

	void showWest() { // type
		type.setLayout(new GridLayout(0, 1));

		combo = new JRadioButton("콤보(10000)");
		potato = new JRadioButton("포테이토(12000)");
		bulgogi = new JRadioButton("불고기(15000)");

		group = new ButtonGroup(); // 그냥 그룹으로만 묶은거, 화면에 띄우는게 아님
		group.add(combo);
		group.add(potato);
		group.add(bulgogi);
		// 중간 패널에 그룹 경계선 (Border 객체)
		Border border = BorderFactory.createTitledBorder("종류");
		type.setBorder(border); // 생성한 객체를 사용하려면 setBorder로 쓰기
		type.add(combo);
		type.add(potato);
		type.add(bulgogi);
		add("West", type);
	}

	void showCenter() { // topping
		topping.setLayout(new GridLayout(0, 1));

		p = new JCheckBox("피망(+1000)");
		ch = new JCheckBox("치즈(+2000)");
		pe = new JCheckBox("페퍼로니(+1000)");
		b = new JCheckBox("베이컨(+2000)");
		// 중간 패널에 그룹 경계선 (Border 객체)
		Border border = BorderFactory.createTitledBorder("추가토핑");
		topping.setBorder(border); // 생성한 객체를 사용하려면 setBorder로 쓰기
		topping.add(p);
		topping.add(ch);
		topping.add(pe);
		topping.add(b);
		add("Center", topping);
	}

	void showEast() { // size
		size.setLayout(new GridLayout(0, 1));

		small = new JRadioButton("Small(기본)");
		medium = new JRadioButton("Medium(+5000)");
		large = new JRadioButton("Large(+10000)");

		group2 = new ButtonGroup(); // 그냥 그룹으로만 묶은거, 화면에 띄우는게 아님
		group2.add(small);
		group2.add(medium);
		group2.add(large);
		// 중간 패널에 그룹 경계선 (Border 객체)
		Border border = BorderFactory.createTitledBorder("크기");
		size.setBorder(border); // 생성한 객체를 사용하려면 setBorder로 쓰기
		size.add(small);
		size.add(medium);
		size.add(large);
		add("East", size);
	}

	void showSouth() { // button
		button1 = new JButton("주문");
		button2 = new JButton("취소");
		field1 = new JTextField(25);
		field2 = new JTextField("0", 8);
		
		MatteBorder b6 = new MatteBorder(5, 5,5,5, Color.pink);
		button.setBorder(b6);
		
		button.add(button1);
		button.add(button2);
		button.add(field1);
		button.add(field2);
		add("South", button);

		button1.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				JButton btn1 = (JButton) e.getSource();
				if (btn1.getText() == "주문") {
					price = 0;
					if (combo.isSelected()) {
						price += 10000;
						str = " 콤보";
					}
					if (potato.isSelected()) {
						price += 12000;
						str = " 포테이토";
					}
					if (bulgogi.isSelected()) {
						price += 15000;
						str = " 불고기";
					}
					if (p.isSelected()) {
						price += 1000;
					}
					if (ch.isSelected()) {
						price += 2000;
					}
					if (pe.isSelected()) {
						price += 1000;
					}
					if (b.isSelected()) {
						price += 2000;
					}
					if (medium.isSelected()) {
						price += 5000;
					}
					if (large.isSelected()) {
						price += 10000;
					}

					//field1의 텍스트를 받아온 후 피자이름str을 붙여주고 텍스트필드로 전달되는 int price를 String타입으로 변경
					field1.setText(field1.getText() + str + Integer.toString(price));
					//모든 price를 더한 값=total
					total += price;
					field2.setText(Integer.toString(total));

				}
			}
		});
		button2.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				JButton btn2 = (JButton) e.getSource();
				if (btn2.getText() == "취소") {
					// 그룹되어있는 라디오버튼은 한번에 clear
					group.clearSelection();
					group2.clearSelection();
					// 그룹 안되어 있는 체크박스는 하나씩 선택된걸 false로 바꿈
					p.setSelected(false);
					ch.setSelected(false);
					pe.setSelected(false);
					b.setSelected(false);
					// 텍스트필드 값은 0으로 만듦
					field1.setText("");
					field2.setText("0");
					str = null;
					price = 0;
				}
			}
		});
	}
}

public class PizzaEx {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Pizza();
	}

}

 

<출력결과>