Java(GUI)_Event_35

2024. 11. 8. 16:57·Java/기초 내용 정리

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
'Java/기초 내용 정리' 카테고리의 다른 글
  • Java(IO)_02
  • Java(IO)_01
  • Java(GUI)_Event_34
  • Java(Collection)_10
mw41817
mw41817
일생의 개발 기록 저장소
  • mw41817
    IT 개발 일지
    mw41817
    • Index (487)
      • HTML (36)
        • 기초 내용 정리 (36)
      • CSS (29)
        • 기초 내용 정리 (29)
      • JavaScript (60)
        • 기초 내용 정리 (60)
      • JQuery (38)
        • 기초 내용 정리 (38)
      • Java (232)
        • 기초 내용 정리 (232)
      • JSP (46)
        • 기초 내용 정리 (46)
      • Spring, Boot (31)
        • 기초 내용 정리 (31)
      • DB (5)
        • Oracle SQL (5)
      • Code WorkBook (6)
        • programmers (6)
        • Baekjoon (0)
      • 기타 (1)
        • 유용한 사이트 (3)
  • 전체
    오늘
    어제
  • 글쓰기 관리
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 카테고리
    • 주인장 GitHub
  • 공지사항

  • 인기 글

  • 태그

    html #코딩 #프로그래밍 #기초
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
mw41817
Java(GUI)_Event_35
상단으로

티스토리툴바