Notice
Recent Posts
Recent Comments
Link
혜야의 코딩스토리
[자바/Java] GUI 커피 주문 프로그램(키오스크) ☕ 본문
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로 해두었는데 그래서인가.........
'꿈 : 멋진 개발자 🧸 > Java' 카테고리의 다른 글
[JSP/Servlet] JSP(Java Server Pages)와 서블릿 (0) | 2022.07.17 |
---|---|
[Java] 서블릿이란? (0) | 2022.07.17 |
[자바/Java] 도서 관리 프로그램 📖 (0) | 2022.05.31 |
[자바/Java] GUI 프로그래밍_동전 먹기 게임 ⭐ (0) | 2022.05.25 |
[자바/Java] GUI 프로그래밍_고양이 키우기 🐱 (0) | 2022.05.20 |