2024-11-08








package basic;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Ex35_Event extends JFrame {
public Ex35_Event() {
setTitle("커피 자판기");
// 컨테이너를 4개 만들어야 한다.
JPanel container1 = new JPanel(); // 상단-1 컨테이너
JPanel container2 = new JPanel(); // 상단-2 컨테이너
JPanel container3 = new JPanel(); // 상단-3 컨테이너
JPanel container4 = new JPanel(); // 하단 컨테이너
// 1. 컴포넌트를 만들어 보자.
// 1-1. 상단-1 컨테이너에 올려질 컴포넌트를 만들자.
JLabel jl1 = new JLabel("원하는 커피 선택");
// 1-2. 상단-2 컨테이너에 올려질 컴포넌트를 만들자.
JRadioButton jrb1 = new JRadioButton("아메리카노(2500)");
JRadioButton jrb2 = new JRadioButton("카페모카(3500)");
JRadioButton jrb3 = new JRadioButton("에스프레소(2500)");
JRadioButton jrb4 = new JRadioButton("카페라떼(4000)");
ButtonGroup bg = new ButtonGroup();
bg.add(jrb1); bg.add(jrb2);
bg.add(jrb3); bg.add(jrb4);
// 1-3. 상단-3 컨테이너에 올려질 컴포넌트를 만들자.
JLabel jl2 = new JLabel("수 량 : ");
JTextField jtf2 = new JTextField(5);
JLabel jl3 = new JLabel("입금액 : ");
JTextField jtf3 = new JTextField(5);
// 1-4. 가운데 영역에 들어갈 컴포넌트를 만들어 보자.
JTextArea jta = new JTextArea(5, 10);
JScrollPane jsp = new JScrollPane(
jta,
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
jta.setLineWrap(true);
// 1-5. 하단 컨테이너에 들어갈 컴포넌트를 만들자.
JButton button1 = new JButton("계 산");
JButton button2 = new JButton("종 료");
JButton button3 = new JButton("취 소");
// 2. 컴포넌트들을 컨테이너에 올려야 한다.
// 2-1. 상단-1 컨테이너에 들어갈 컴포넌트를 올리자.
container1.add(jl1);
// 2-2. 상단-2 컨테이너에 들어갈 컴포넌트를 올리자.
container2.add(jrb1);
container2.add(jrb2);
container2.add(jrb3);
container2.add(jrb4);
// 2-3. 상단-3 컨테이너에 들어갈 컴포넌트를 올리자.
container3.add(jl2); container3.add(jtf2);
container3.add(jl3); container3.add(jtf3);
// 2-4. 하단 컨테이너에 들어갈 컴포넌트를 올리자.
container4.add(button1);
container4.add(button2);
container4.add(button3);
// 새로운 컨테이너를 두 개 더 만들자.
JPanel group1 = new JPanel(new BorderLayout());
JPanel group2 = new JPanel(new BorderLayout());
// group1 컨테이너에는 기존의 container1과 container2를 같이 올림.
group1.add(container1, BorderLayout.NORTH);
group1.add(container2, BorderLayout.SOUTH);
// group2 컨테이너에는 기존의 container3와 jsp, container3를 같이 올림.
group2.add(container3, BorderLayout.NORTH);
group2.add(jsp, BorderLayout.CENTER);
group2.add(container4, BorderLayout.SOUTH);
// 3. 컨테이너를 프레임에 올려주어야 한다.
// ==> 새로 만든 group1, group2 컨테이너만 올리면 된다.
add(group1, BorderLayout.NORTH);
add(group2, BorderLayout.CENTER);
setBounds(100, 100, 300, 300);
pack();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
// 4. 이벤트 처리 작업 진행
// 4-1. 계산버튼(button1) 클릭 시 이벤트 처리 작업
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String coffeeStr = ""; // 커피종류가 들어갈 문자열변수
int coffeePrice = 0; // 커피가격이 들어갈 정수형변수
// 커피종류
if(jrb1.isSelected()) {
coffeeStr = "아메리카노";
coffeePrice = 2500;
}else if (jrb2.isSelected()) {
coffeeStr = "카페모카";
coffeePrice = 3500;
}else if (jrb3.isSelected()) {
coffeeStr = "에스프레소";
coffeePrice = 2500;
}else if (jrb4.isSelected()) {
coffeeStr = "카페라떼";
coffeePrice = 4000;
}
int amount = Integer.parseInt(jtf2.getText());
int money = Integer.parseInt(jtf3.getText());
// 공급가액 계산 : 단가 * 수량
int sum = coffeePrice * amount;
// 부가세액 계산 : 공급가액 * 0.1
int vat = (int)(sum * 0.1);
// 총급액 계산 : 공급가액 + 부가세액
int total = sum + vat;
// 잔액 계산 : 입금액 - 총금액
int change = money - total;
// 계산 결과를 화면에 출력해 보자.
jta.append("커피종류 : " + coffeeStr + "\n");
jta.append("커피단가 : " + String.format("%,d", coffeePrice) + "원\n");
jta.append("커피수량 : " + amount + "잔\n");
jta.append("공급가액 : " + String.format("%,d", sum) + "원\n");
jta.append("부가세액 : " + String.format("%,d", vat) + "원\n");
jta.append("총금액 : " + String.format("%,d", total) + "원\n");
jta.append("거스름돈 : " + String.format("%,d", change) + "원\n");
// 전체 컴포넌트의 값을 clear 시키는 작업
jtf3.setText(""); jtf2.setText("");
// 라디오 버튼도 초기화가 되어야 한다.
bg.clearSelection();
}
});
// 4-2. 종료버튼(button2) 클릭 시 이벤트 처리 작업
button2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
// 4-3. 취소버튼(button3) 클릭 시 이벤트 처리 작업
button3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 전체 컴포넌트의 값을 clear 시키는 작업
jtf3.setText(""); jtf2.setText("");
// 라디오 버튼도 초기화가 되어야 한다.
bg.clearSelection();
}
});
}
public static void main(String[] args) {
new Ex35_Event();
}
}'Java > 기초 내용 정리' 카테고리의 다른 글
| Java(IO)_02 (0) | 2024.11.11 |
|---|---|
| Java(IO)_01 (0) | 2024.11.11 |
| Java(GUI)_Event_34 (0) | 2024.11.08 |
| Java(Collection)_10 (1) | 2024.11.08 |
| Java(Collection)_09 (0) | 2024.11.08 |