Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Archives
Today
Total
관리 메뉴

기록

day 0531 GUI 연습 본문

📖

day 0531 GUI 연습

슈슈파나 2024. 5. 31. 17:09

/*
PROGRAMMIN 1.
다음 그림과 같이 아주 단순한 한글-영문 변환기를 작성하여 보자.
왼쪽 텍스트 영역에 사용자가 한글을 입력하고 "변환" 버튼을 누르면 
미리 입력된 몇 개의 단어만을 영어로 변환한다
(텍스트에서 단어를 분리하려면 Scanner 클래스의 next() 메소드를 사용하라.
*/
package com.kosta.exam01;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.StringTokenizer;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class KorToEng extends JFrame {
	JTextArea jta01;
	JTextArea jta02;
	
	HashMap<String, String> dic;
	public static String[] suffix = {"은","는","이","가","로"};
	
	// 조사를 뗴고 단어만 반환하는 메소드
	public static String getRemoveSuffix(String kor){
		// 영어로 '로' 는 kor
		for(String s : suffix) {
			if(kor.endsWith(s)) {
				kor = kor.substring(0, kor.length() -1);
				break;
			}
		}
		return kor;
	}
	
	public KorToEng() {
		dic = new HashMap<String, String>();
		dic.put("텍스트", "Text");
		dic.put("영어", "English");
		dic.put("국어", "kor");
		
		jta01= new JTextArea(10, 50);
		jta02= new JTextArea(10, 50);
		
		JButton btnOK = new JButton("변환");
		JButton btnCancel = new JButton("취소");
		
		JPanel p1 = new JPanel();
		JPanel p2 = new JPanel();
		
		p1.setLayout(new GridLayout(1, 2,10,10));
		p2.setLayout(new FlowLayout(FlowLayout.CENTER));		
		
		JScrollPane jsp01 = new JScrollPane(jta01);
		JScrollPane jsp02 = new JScrollPane(jta02);
		
		p1.add(jsp01);
		p1.add(jsp02);
		
		p2.add(btnOK);
		p2.add(btnCancel);
		
		setLayout(new BorderLayout());
		add(p1, BorderLayout.CENTER);
		add(p2, BorderLayout.SOUTH);
		
		setTitle("텍스트 변환");
		setSize(400, 300);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		
		btnOK.addActionListener(new ActionListener() {			
			@Override
			public void actionPerformed(ActionEvent e) {
				String str = jta01.getText();
				
				StringTokenizer st = new StringTokenizer(str);
				while(st.hasMoreTokens()) {
					String kor= st.nextToken();
					// 조사를 떼기 위한 
					kor = getRemoveSuffix(kor);
					String eng = dic.get(kor);

					if(eng != null) {
						str = str.replace(kor, eng);						
					}
				}
				jta02.setText(str);
			}
		});
		
		btnCancel.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				jta01.setText("");
				jta02.setText("");
				
			}
		});	
}
	
	public static void main(String[] args) {
		new KorToEng();
	}
}

 

/setTest/

package com.kosta.exam01;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;

public class SetTest {
	public static void main(String[] args) {
		// set : 중복 X
		HashSet<String> set = new HashSet<String>();
		set.add("사과");
		set.add("수박");
		set.add("딸기");
		set.add("딸기");
		System.out.println(set);
		
		// Set 자체에는 반복(루프) 실행 할 수 있는 기능이 없다
		// Iterator (반복자) 를 통해서 반복 할 수 있다
		Iterator<String> iter = set.iterator();
		
		while(iter.hasNext()) {
			String s = iter.next();
			System.out.println(s);
		}
		
	}
}

 

/mapTest/

package com.kosta.exam01;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

public class MapTest {
	public static void main(String[] args) {
		// map : 중복 X
		HashMap<String, String> map = new HashMap<String, String>();
		
		map.put("가", "010");
		map.put("나", "011");
		map.put("다", "016");
		
		System.out.println(map);
		
		// map의 데이터만큼 반복 돌기 (map으로부터 key를 반환하는 메소드)
		// map의 모든 key를 set으로 갖고온다 
		Set<String> keyList= map.keySet();
		
		// set은 루프를 못돌기때문에 Iterator를 써야한다
		Iterator<String> iter = keyList.iterator();
		
		while(iter.hasNext()) {
			String key = iter.next();
			String  value = map.get(key);
			System.out.println("key : " + key + ", value : " +  value);
		}
	}
}

btnOK.addActionListener(new ActionListener() {			
    @Override
    public void actionPerformed(ActionEvent e) {
        String str = jta01.getText();

        // dic의 key를 가져온다
        Set<String> keyList = dic.keySet();
        Iterator<String> iter = keyList.iterator();

        // 내가 가지고있는 사전만큼 루프를 돈다
        while(iter.hasNext()) {
            // 영어단어를 가져와서
            String kor = iter.next();
            String eng = dic.get(kor);

            // 해당하는 value로 바꿔라
            str = str.replace(kor, eng);
            jta02.setText(str);
        }
    }
});

 

/*
PROGRAMMING 5.
숫자를 추측하는 게임을 작성하여 보자.
*/

 

숫자를 출력하시오 : JLabel > 한번만들면 끝

35 : JTextField

너무낮습니다 : JLabel 이지만 계속 사용 > 멤버로 사용

다시한번, 종료 : JButton 버튼

package com.kosta.exam01;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class NumberGuess extends JFrame {
	JTextField jtf01_input;
	JLabel jlb_result;
	JLabel jlb_cnt;
	
	int com;
	int user;
	int cnt;
	
	public NumberGuess() {
		// 1 ~ 100 난수 만들기
		Random r = new Random();
		com = r.nextInt(100) + 1;
		
		setTitle("숫자게임");
		
		// 기본은 BorderLayout : Center
		setLayout(new FlowLayout());
		
		// new JTextField(5) 5글자 입력할 수 있는 형태
		// new JTextField("           ") 빈칸만큼 잡아준다
		jtf01_input = new JTextField(15);

		// 숫자를 추측하시오 (한번만 사용하면 변수 X) 
		add(new JLabel("숫자를 추측하시오 : "));
		
		// TextField를 담는다 
		// add(jtf01_input, BorderLayout.NORTH); 크기가 의미 없다 (크기자동설정)
		add(jtf01_input); 

		// 줄바꿈
		// add(new JLabel()); // add(new JLabel("<html><br></html>"));
		
		// 너무 낮습니다 (계속사용하려면 멤버변수로 만든다)
		jlb_result = new JLabel("여기에 결과가 나옵니다");
		add(jlb_result);

		JButton btnOK = new JButton("     다시 한번     ");
		
		JButton btnExit = new JButton("     종료     ");
		add(btnOK);
		add(btnExit);
		
		jlb_cnt= new JLabel("출력횟수 : ");
		add(jlb_cnt);
		jlb_cnt.setOpaque(true);
		// 배경색 바꾸기
		//jlb_cnt.setBackground(Color.black);
		// 글자색 바꾸기
		// jlb_cnt.setForeground(Color.white);
		
		// frame color 설정하기
		getContentPane().setBackground(Color.white);
		// 라벨은 원래 투명한 성격이라 배경을 설정하려면 불투명하게 한 다음 설정해야 합니다
		jlb_result.setOpaque(true);
		// jlb_result.setBackground(Color.pink);
		
		btnOK.setBackground(new Color(115,115,115));
		btnExit.setBackground(new Color(13,13,13));
		
		btnOK.setForeground(Color.white);
		btnExit.setForeground(Color.white);
		
		setSize(250, 	200);
		// 크기 조절하지 마
		setResizable(false);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		btnOK.addActionListener(new ActionListener() {	
			@Override
			public void actionPerformed(ActionEvent e) {
				user = Integer.parseInt(jtf01_input.getText());
				
				String str = "딩동댕 ~ 정답입니다.";
				// 틀리면 빨강, 맞으면 파랑이 되도록 컬러를 설정한다
				jlb_result.setBackground(new Color(217, 154, 171));
			
				// user가 com보다 크다면
				if(user > com) {
					str ="     너무 높습니다.     ";
				// user가 com보다 작다면
				}else if(user < com) {
					str = "     너무 낮습니다.     ";
				}else {
					// new Color(0,0,0) 컬러 색상 정하기
					jlb_result.setBackground(new Color(217, 176, 183));
				}

				System.out.println(str);
				// label에 글자 설정하기
				jlb_result.setText(str);
				
				cnt++;
				jlb_cnt.setText(cnt + "번 째 시도입니다.");
			}
		});
		
		btnExit.addActionListener(new ActionListener() {	
			@Override
			public void actionPerformed(ActionEvent e) {
				
			}
		});
		
	}
	
	public static void main(String[] args) {
		new NumberGuess();
	}
}

package com.kosta.exam01;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JCheckBox;
import javax.swing.JFrame;

public class JCheckBoxTest extends JFrame {
	JCheckBox jcb01;
	JCheckBox jcb02;
	
	public JCheckBoxTest() {
		setLayout(new FlowLayout());
		jcb01 = new JCheckBox("사과");
		jcb02 = new JCheckBox("포도");
		
		add(jcb01);
		add(jcb02);
		
		setSize(200, 100);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		jcb01.addActionListener(new ActionListener() {	
			@Override
			public void actionPerformed(ActionEvent e) {
				if(jcb01.isSelected()) {
					System.out.println("사과를 선택");
				}else {
					System.out.println("사과를 해제");
				}
			}
		});
		
		jcb02.addActionListener(new ActionListener() {
	
			@Override
			public void actionPerformed(ActionEvent e) {
				if(jcb02.isSelected()) {
					System.out.println("포도를 선택");
				}else {
					System.out.println("포도를 해제");
				}
			}
		});
	}

	public static void main(String[] args) {
		new JCheckBoxTest();
	}
}

 


 

14:00 ~ 

 

// 사과를 선택, 포도를 선택, 사과/포도를 선택 JLabel 만들기

package com.kosta.exam01;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.print.attribute.SetOfIntegerSyntax;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class JCheckBoxTest02 extends JFrame {
	JCheckBox jcb01;
	JCheckBox jcb02;
	JLabel result;
	
	public JCheckBoxTest02() {
		setLayout(new FlowLayout());
		jcb01 = new JCheckBox("사과");
		jcb02 = new JCheckBox("포도");
		
		// 결과를 출력할 객체
		result = new JLabel();
		
		result.setOpaque(true);
		result.setForeground(Color.white);
		result.setBackground(new Color(242, 92, 92));
		
		add(jcb01);
		add(jcb02);
		add(result);
		
		
		// 사과를 선택, 포도를 선택, 사과/포도를 선택

		setSize(400, 100);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		jcb01.addActionListener(new ActionListener() {	
			@Override
			public void actionPerformed(ActionEvent e) {
				if(jcb01.isSelected() && jcb02.isSelected()) {
					result.setText("사과/포도 선택");
				}else if(jcb01.isSelected()) {
					result.setText("사과 선택");					
				}else if(jcb02.isSelected()) {
					result.setText("포도 선택");
				}else {
					result.setText("아무것도 선택하지 않았습니다");
				}
			}
		});
		
		jcb02.addActionListener(new ActionListener() {
	
			@Override
			public void actionPerformed(ActionEvent e) {
				if(jcb01.isSelected() && jcb02.isSelected()) {
					result.setText("사과/포도 선택");
				}else if(jcb01.isSelected()) {
					result.setText("사과 선택");					
				}else if(jcb02.isSelected()) {
					result.setText("포도 선택");
				}else {
					result.setText("아무것도 선택하지 않았습니다");
				}
			}
		});
	}

	public static void main(String[] args) {
		new JCheckBoxTest02();
	}
}

 

/jcb01.addActionListener, jcb02.addActionListener 메소드로 만들기/

public void checkedList() {
    if(jcb01.isSelected() && jcb02.isSelected()) {
        result.setText("사과/포도 선택");
    }else if(jcb01.isSelected()) {
        result.setText("사과 선택");					
    }else if(jcb02.isSelected()) {
        result.setText("포도 선택");
    }else {
        result.setText("아무것도 선택하지 않았습니다");
    }
}
jcb01.addActionListener(new ActionListener() {	
    @Override
    public void actionPerformed(ActionEvent e) {
        checkedList();
    }
});

jcb02.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {
        checkedList();
    }
});

 

/과일이 더 많을 때의 기능 구현하기/

package com.kosta.exam01;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.print.attribute.SetOfIntegerSyntax;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class JCheckBoxTest04 extends JFrame {
	JLabel result;
	String[] arr = {"사과","포도","수박","바나나","오렌지"};
	JCheckBox[] jcb = new JCheckBox[arr.length];
	
	public void checkedList() {
		// 선택 항목을 누적한다
		String r = " ";
		
		for(int i = 0; i <jcb.length; i++) {
			if(jcb[i].isSelected()) {
				// 글자를 가져온다
				r += jcb[i].getText() + ",";
			}
		}

		if(r.equals(" ")) { // r = " "; if(r.length() == 0) 
			r = "선택 해 주세요.";
		}else {
			// 마지막 , 빼기
			r = r.substring(0, r.length() - 1);
			r += "를(을) 선택하였습니다.";
		}
		result.setText(r);
	}
	
	public JCheckBoxTest04() {
		setLayout(new FlowLayout());
		
		for(int i = 0; i < arr.length; i++) {
			jcb[i] = new JCheckBox(arr[i]);
			add(jcb[i]);
			
			jcb[i].addActionListener(new ActionListener() {	
				@Override
				public void actionPerformed(ActionEvent e) {
					checkedList();
				}
			});
		}
		
		// 결과를 출력할 객체
		result = new JLabel("선택 해 주세요.");
		add(result);
		
		result.setOpaque(true);
		result.setForeground(Color.white);
		result.setBackground(new Color(242, 92, 92));

		setSize(400, 100);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
	}

	public static void main(String[] args) {
		new JCheckBoxTest04();
	}
}

 

/*
PROGRAMMING 2.
자동차 정비소를 위한 애플리케이션을 작성하여 보자.
다음과 같은 메뉴와 요금표를 사용한다

수리			가격(원)
엔진 오일 교환		45000
자동 변속이 오일 교환	80000
에어콘 필터 교환		30000
타이어 교환		100000

사용자가 수리를 선택하면 전체 가격을 계산하여 출력하도록 하라.
사용자는 여러 수리를 동시에 할 수 있다. 체크 박스를 사용하라.
*/

 

/화면 구성/

package com.kosta.exam01;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Iterator;
import java.util.LinkedHashMap;

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class RepairShop extends JFrame {
	// map, 배열 정하기
	LinkedHashMap<String, Integer> map;
	
	JCheckBox[] jcb;
	JLabel jlb_result;
	
	// 총 금액을 누적 할 변수
	int tot;

	public  RepairShop() {
		JPanel p_center = new JPanel();
		p_center.setLayout(new GridLayout(6, 2));
		p_center.add(new JLabel("수리"));
		p_center.add(new JLabel("가격(원)"));
		
		map = new LinkedHashMap<String, Integer>();
		
		// 값으로 체크박스 만들기
		map.put("엔진 오일 교환", 45000);
		map.put("자동 변속기 오일 교환", 80000);
		map.put("에어콘 필터 교환", 30000);
		map.put("타이어 교환", 100000);
	
		// 체크박스의 크기 잡기
		jcb = new JCheckBox[map.keySet().size()];
		Iterator<String> iter = map.keySet().iterator();
		
		int i = 0;
		while(iter.hasNext()) {
			String item = iter.next();
			jcb[i] = new JCheckBox(item); // iter.next() 값을 가져온다
			p_center.add(jcb[i]);
			p_center.add(new JLabel(map.get(item) + " "));
			
			jcb[i].addActionListener(new ActionListener() {	
				@Override
				public void actionPerformed(ActionEvent e) {
					// 눌러진 체크박스의 정보(문자)를 갖고온다 (눌러진 정보가 필요할 때 사용한다)
					String item = e.getActionCommand();
					System.out.println(item);
				}
			});
		}
		
		jlb_result = new JLabel("총 금액 : ");
		
		// 기본적으로 borderLayout
		add(p_center, BorderLayout.CENTER);
		add(jlb_result, BorderLayout.SOUTH);
		
		setSize(400, 200);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	
	public static void main(String[] args) {
		new  RepairShop();
	}
}
@Override
public void actionPerformed(ActionEvent e) {
    // 눌러진 체크박스의 정보(문자)를 갖고온다 (눌러진 정보가 필요할 때 사용한다) 
    String item = e.getActionCommand();

    // 눌러진 오브젝트를 가져온다 (캐스팅)
    String text = ((JCheckBox)e.getSource()).getText();
    System.out.println(text);
	}
});

 

/배열로 만들기/

package com.kosta.exam01;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Iterator;
import java.util.LinkedHashMap;

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class RepairShop02 extends JFrame {
	String []item = {"엔진 오일 교환","자동 변속기 오일 교환","에어콘 필터 교환","타이어 교환"};
	int []price = {45000,80000,30000,100000};
	JCheckBox [] jcb = new JCheckBox[4];
	JLabel jlb_result;

	public void calc() {
		int tot = 0;
		for(int i=0; i<jcb.length; i++) {
			if(jcb[i].isSelected()) {
				tot += price[i];
			}
		}
		jlb_result.setText(tot+"원");
	}
	
	public  RepairShop02() {
		JPanel p_center = new JPanel();
		p_center.setLayout(new GridLayout(6, 2));
		
		p_center.add(new JLabel("수리"));
		p_center.add(new JLabel("가격(원)"));
		add(p_center, BorderLayout.CENTER);
	
		for(int i=0; i<item.length; i++) {
			jcb[i] = new JCheckBox(item[i]);
			p_center.add(jcb[i]);
			p_center.add(new JLabel(price[i]+""));
			
			jcb[i].addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent e) {
					calc();	
				}
			});
		}
		
		jlb_result = new JLabel("총 금액 : ");
		add(jlb_result, BorderLayout.SOUTH);
		
		setSize(400, 200);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	
	public static void main(String[] args) {
		new  RepairShop02();
	}
}

 

/map으로 만들기/

package com.kosta.exam01;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Set;

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class RepairShop03 extends JFrame {
	LinkedHashMap<String, Integer> map;
	JCheckBox []jcb;
	JLabel jlb_result;
	int total;
	
	public void calc() {
		for( int i=0; i<jcb.length;i++  ) {
			if(jcb[i].isSelected()) {
				String item = jcb[i].getText();
				int price = map.get(item);
				total += price;
			}
		}
		jlb_result.setText("총금액:"+total+"원");
	}
	
	public RepairShop03() {
		JPanel p_center = new JPanel();
		p_center.setLayout(new GridLayout(6, 2));
		p_center.add(new JLabel("수리"));
		p_center.add(new JLabel("가격(원)"));
		
		map= new LinkedHashMap<String, Integer>();
		map.put("엔진 오일 교환", 45000);
		map.put("자동 변속기 오일 교환", 80000);
		map.put("에어콘 필터 교환", 30000);
		map.put("타이어 교환", 100000);
		
 		jcb = new JCheckBox[ map.keySet().size() ];
		Iterator<String>  iter = map.keySet().iterator();
		int i=0;
		while(iter.hasNext()) {
			String item = iter.next();
			jcb[i] = new JCheckBox(item);
			p_center.add(jcb[i]);
			p_center.add(new JLabel( map.get(item) +"" ));
			jcb[i].addActionListener(new ActionListener() {
				
				@Override
				public void actionPerformed(ActionEvent e) {
					System.out.println("체크박스의 길이 : " +jcb.length);
					calc();
				}
			});
			i++;
		}
		
		jlb_result = new JLabel("총금액:");
				
		add(p_center, BorderLayout.CENTER);
		add(jlb_result, BorderLayout.SOUTH);
		
		setSize(400, 300);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	public static void main(String[] args) {
		new RepairShop03();
	}
}

 

- 오늘 학습한 내용에 대하여 요약 및 정리하고 궁금한 점 질문하도록 합니다

- JRadioButton의 사용법을 알아보고 pdf "gui 연습"의 3번을 프로그래밍 해 봅니다

/*
PROGRAMMING 3.
카페에서 커피 크기를 선택하면 가격을 계산하여 주는 애플리케이션을 작성하여 보자.

커피크기		가격(원)
Small		3000
Medium		4000
large		5000

사용자는 3개 중에 하나만 선택할 수 있다. 따라서 라디오 버튼을 사용하여야 한다.
*/
package com.kosta.exam01;

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.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;

public class Coffee extends JFrame {
	String[] size = {"Small", "Medium", "Large"};
	int[] price = {3000, 4000, 5000};
	JRadioButton[] jrb = new JRadioButton[3];
	JLabel result;
	// 여러 라디오 버튼을 그룹으로 묶어서 한 번에 하나만 선택할 수 있도록 선언
	ButtonGroup group;
	
	public void calc() {
		int tot = 0;
		for(int i = 0; i < jrb.length; i++) {
			if(jrb[i].isSelected()) {
				tot += price[i];
			}
		}
		result.setText("주문한 커피 : " + getSizeLabel() + ", 가격 : " + tot);
	}
	
	// getSizeLabel() 선택된 크기의 라벨을 반환하는 메서드 (커피 크기 라벨을 가져온다)
	public String getSizeLabel() {
		for(int i = 0; i < jrb.length; i++) {
			if(jrb[i].isSelected()) {
				return size[i];
			}
		}
	return " ";
	}
	
	public Coffee() {
		JPanel p_center = new JPanel();
		p_center.setLayout(new GridLayout(4, 2));
		
		p_center.add(new JLabel("커피 크기"));
		p_center.add(new JLabel("가격(원)"));
		add(p_center, BorderLayout.CENTER);
		
		// 사용하려면 객체를 초기화 해야 한다
		group = new ButtonGroup();
		
		for(int i = 0; i < size.length; i++) {
			jrb[i] = new JRadioButton(size[i]);
			p_center.add(jrb[i]);
			p_center.add(new JLabel(price[i] + ""));
			
			jrb[i].addActionListener(new ActionListener() {	
				@Override
				public void actionPerformed(ActionEvent e) {
					calc();
				}
			});
			group.add(jrb[i]);
		}
		
		result = new JLabel("주문한 커피 : ");
		add(result, BorderLayout.SOUTH);
		
		result.setOpaque(true);
		result.setForeground(Color.white);
		result.setBackground(new Color(242, 92, 92));
		
		setSize(400, 200);
		setResizable(false);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	
	public static void main(String[] args) {
		new Coffee();
	}
}

 

<< 숙제 >>

- 무료암검진 판별, 별자리 판별, 사주팔자, 숫자한글변환 프로그램 중에서

  하나이상을 선택하여 GUI로 만들어 봅니다

 

- 윈도우의 계산기 프로그램의 동작방식을 분석하고 간단한 계산기 프로그램을 작성 해 봅니다

 

- 윈도우의 메모장 프로그램을 분석하여 간단한 메모장 프로그램을 작성 해 봅니다

 

[GUI 참고 블로그 - https://yooniron.tistory.com/12]

'📖' 카테고리의 다른 글

day 0604 네트워크 프로그래밍  (2) 2024.06.04
day 0603 메모장  (0) 2024.06.03
day 0530 멀티쓰레드_임계영역_쓰레드사이의 통신  (0) 2024.05.30
day 0529 멀티쓰레드  (1) 2024.05.29
day 0528 StringAndStringBuffer_예외처리  (1) 2024.05.28