혜야의 코딩스토리

[자바/Java] GUI 커피 주문 프로그램(키오스크) ☕ 본문

꿈 : 멋진 개발자 🧸/Java

[자바/Java] GUI 커피 주문 프로그램(키오스크) ☕

hyeya_ 2022. 6. 8. 01:04
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Font;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class cafeKiosk extends JFrame {
	int count = 0;
	String show = "";
	
	public cafeKiosk() {
	//디자인
	JFrame frame = new JFrame("카페 키오스크");
	frame.setBounds(0, 0, 625, 1000);
	frame.setBackground(Color.black);

	//폰트
	Font font = new Font(Font.SANS_SERIF,Font.PLAIN,18);
	Font font1 = new Font(Font.MONOSPACED,Font.BOLD, 22);
	
	//북쪽
	Panel pNorth = new Panel();
	pNorth.setBackground(new Color(255,255,215));
	pNorth.setLayout(null);
	pNorth.setSize(0,500);
	pNorth.setFont(font);
	
	//배열 설정
	String[] menu = {"에스프레소","아메리카노","카페라떼","바닐라라떼","카페모카","말차라떼","레몬에이드","자몽에이드"};
	int[] price = {4000,4500,5000,5500,5500,5900,6200,6200};
	JButton[] bt = new JButton[menu.length];
	TextField[] number = new TextField[menu.length];
	Button[] minus = new Button[menu.length];
	Button[] plus = new Button[menu.length];
	JButton[] ok = new JButton[menu.length];
	Label l[] = new Label[menu.length];
	ImageIcon[] icon = new ImageIcon[menu.length];
	
	//버튼 설정
	for(int i=0; i<menu.length;i++) {
		
		//커피 버튼
		bt[i] = new JButton(menu[i]);
		if(i<4) {
			bt[i].setBounds(25+i*150,50,100,100);
		}else {
			bt[i].setBounds(25+(i-4)*150,300,100,100);
		}
		icon[i] = new ImageIcon(getClass().getResource((i+1)+".png"));
		bt[i].setIcon(icon[i]);

		//숫자 txt버튼
		number[i] = new TextField("0");
		number[i].setBackground(Color.white);
		number[i].setEditable(false);
		number[i].setBounds(bt[i].getX()+30, bt[i].getY()+130,40,20);
		
		// - 버튼
		minus[i] = new Button("-");
		minus[i].setBounds(bt[i].getX(), number[i].getY(),20,20);
		minus[i].setEnabled(false);
		
		// + 버튼
		plus[i] = new Button("+");
		plus[i].setBounds(bt[i].getX()+(100-20), number[i].getY(),20,20);
		plus[i].setEnabled(false);
		
		//가격
		l[i] = new Label(price[i]+"원");
		l[i].setBounds(bt[i].getX()+20, number[i].getY()-25,100,20);
		
		//확인 버튼
		ok[i] = new JButton("확인");
		ok[i].setBounds(bt[i].getX(), number[i].getY()+30, 100, 20);
        ok[i].setEnabled(false);

         pNorth.add(bt[i]);
         pNorth.add(number[i]);
         pNorth.add(minus[i]);
         pNorth.add(plus[i]);
         pNorth.add(l[i]);
         pNorth.add(ok[i]);
		
	}
	
	 //중앙
    TextArea ta = new TextArea("", 0, 0, TextArea.SCROLLBARS_VERTICAL_ONLY);
    ta.setText("   상품명        단가        수량        합계\n\n");
    ta.setBackground(Color.white);
    ta.setEditable(false);
    ta.setFont(font1);

    //남쪽
    Panel pSouth = new Panel();
    pSouth.setFont(font);
    pSouth.setBackground(new Color(255, 255, 215));

    Button bt1 = new Button("주문");
    Button bt2 = new Button("초기화");
    Button bt3 = new Button("닫기");
    pSouth.add(bt1);
    pSouth.add(bt2);
    pSouth.add(bt3);
	
    //주문 버튼
	bt1.addActionListener(new ActionListener() {
		
		@Override
		public void actionPerformed(ActionEvent e) {
			JOptionPane.showMessageDialog(null, ta.getText() + " 주문되었습니다. \n이용해주셔서 감사합니다.");
		    for (int i = 0; i < menu.length; i++) {
                bt[i].setEnabled(true);
                minus[i].setEnabled(false);
                plus[i].setEnabled(false);
                number[i].setText("0");
                ta.setText("   상품명        단가        수량        합계\n\n");

            }
		}
	});
	
	//초기화 버튼
    bt2.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            for (int i = 0; i < menu.length; i++) {
                bt[i].setEnabled(true);
                minus[i].setEnabled(false);
                plus[i].setEnabled(false);
                number[i].setText("0");
                ta.setText("   상품명        단가        수량        합계\n\n");

            }
        }
    });

    //닫기버튼
    bt3.addActionListener(new ActionListener() {
        
        @Override
        public void actionPerformed(ActionEvent e) {
            System.exit(0);
        }
    });

    // 컴포넌트
    frame.add(pNorth, BorderLayout.NORTH);
    frame.add(ta, BorderLayout.CENTER);
    frame.add(pSouth, BorderLayout.SOUTH);
    frame.setVisible(true);

    // 이벤트 처리
    for (int i = 0; i < menu.length; i++) {
        int j = i;

        //커피 버튼 이벤트
        bt[i].addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                minus[j].setEnabled(true);
                plus[j].setEnabled(true);
                bt[j].setEnabled(false);
                ok[j].setEnabled(true);

                count = 0;
            }
        });
    
        // - 버튼 이벤트
        minus[i].addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                if (count > 0) {
                    count = count - 1;
                    number[j].setText(count + "");
                    ok[j].setEnabled(true);
                } else {
                    minus[j].setEnabled(false);
                }
            }
        });
        
        // + 버튼 이벤트
        plus[i].addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                count = count + 1;
                number[j].setText(count + "");
                ok[j].setEnabled(true);
                if (count > 0) {
                    minus[j].setEnabled(true);
                }
            }
        });
        
        //확인 버튼 이벤트
        ok[i].addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                show = bt[j].getActionCommand();
                ta.append("   " + show + "       " + price[j] + "        " + count + "         " + price[j] * count
                        + "원" + "\n");
                ok[j].setEnabled(false);
            }
        });

    }

    // 끄기
    frame.addWindowListener(new WindowAdapter() {
        @Override
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });
	}
	
	//메인
	public static void main(String[] args) {
		new cafeKiosk();
	}
}

처음 실행 화면
메뉴 추가
주문버튼 누르면 실행되는 창

 

AWT에서 한글이 깨져서 사각형으로 나올 때가 종종 있다..강사님께서 신경쓰지 않아도 되는 부분이라고 넘기셨고...

구글링해보니까 프로젝트의 인코딩과 컴파일시의 인코딩이 일치하지 않아서 발생하는 문제같다고 한다..

이클립스 설정을 UTF-8로 해두었는데 그래서인가.........