Daily coding

Java Basic : day 14 - AWT & SWING 10 : 체크박스와 라디오박스 본문

Language/Java_basic

Java Basic : day 14 - AWT & SWING 10 : 체크박스와 라디오박스

sunnnkim 2019. 12. 8. 16:13

AWT & SWING 10

 

 

1. 체크박스
- 다중 선택이 필요한 곳

 

 

2. 라디오 버튼

- 1개만 선택 가능

- AWT에서 원래 지원이 안됐음(체크박스로 혼용해서 사용해야 함)
- Swing : JRadioButton 

 

 


* 체크박스는 ItemListener 인터페이스 상속받아야 함!!!
* 체크박스 여러개 있을 때는 클래스에 상속받아 사용하는 것이 편함
* 하나 두개 일 때는 그냥 바로 new로 추가해서 오버라이딩 해도 됨.
    
    

 

package day15.Lecture01_AWT.test7;

import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.ButtonGroup;
import javax.swing.JOptionPane;
import javax.swing.JRadioButton;

// 체크박스 + 라디오 버튼
public class WindowClass extends Frame implements WindowListener, ItemListener {
	
	Checkbox cb1, cb2,cb3,cb4,cb5,cb6;
	Label label1, label2;
	JRadioButton rb;	// 스윙소속에는 라디오 버튼 있음
	
	public WindowClass() {
		super("체크박스와 라디오버튼");
	
		
		
		// cb1,cb2,c3 - 그룹1 (라디오버튼으로 사용할 것임)
		// cb4, cb5 - 그룹2 (라디오버튼으로 사용할 것임0
		// cb6 - 순수한 체크박스
		
		// 그룹핑 : chexkboxGroup
		CheckboxGroup cbg1 = new CheckboxGroup();
		cb1 = new Checkbox("사과", cbg1, true); 
        // state : 체크한상태로 할건지 아닌지 (true/false)
		cb2 = new Checkbox("배", cbg1, false); 
        // state : 체크한상태로 할건지 아닌지 
		cb3 = new Checkbox("파인애플", cbg1, false); 
        // state : 체크한상태로 할건지 아닌지 
        
		// 체크박스 그룹으로 묶으면 선택이 1개 밖에 안된다. ( = 라디오 버튼)


		// 그룹2
		CheckboxGroup cbg2 = new CheckboxGroup();
		cb4 = new Checkbox("남성", cbg2, true);
		cb5 = new Checkbox("여성", cbg2, true);	// 둘다 true로 해두면 마지막 true만 남고 다 false로 바뀜
		
        
		// cb6
		cb6 = new Checkbox("exit");
		
        
        
		label1 = new Label("label1");
		label2 = new Label("label2");
		
		
		
		// 창에 추가하기
		add(cb1);
		add(cb2);
		add(cb3);
		add(cb4);
		add(cb5);
		add(cb6);
		add(label1);
		add(label2);
		
        
        
		// ItemListener을 추가해야 반응에 대한 액션이 나옴
        
		cb1.addItemListener(this);
		cb2.addItemListener(this);
		cb3.addItemListener(this);
		cb4.addItemListener(this);
		cb5.addItemListener(this);
		cb6.addItemListener(this);
		
        
		// 레이아웃
		setLayout(new FlowLayout());	// 옆으로 쭉 펼쳐놓는 레이아웃
		
		
		
		
		// JRadioButton 소속의 라디오버튼
		
		// 생성하기
		JRadioButton jb1 = new JRadioButton("사과");
		JRadioButton jb2 = new JRadioButton("배");
		JRadioButton jb3 = new JRadioButton("귤");
		
        
		// 1번 버튼 선택 : 중복 선택이 되어있을 경우 먼저 add한 버튼이 눌려있음
		// 선택 안하면 아무것도 안눌려있음
		jb1.setSelected(true);
        
        
		
		// 라디오버튼 묶어줄 그룹 생성하고 add
		ButtonGroup jb = new ButtonGroup();
		jb.add(jb1);
		jb.add(jb2);
		jb.add(jb3);
		
        
		// 라디오버튼을 현재 레이아웃에 추가
		add(jb1);
		add(jb2);
		add(jb3);
		
		
		
		
		
		
		
		// default 값
		setBounds(0, 10, 640, 480);
		setVisible(true);
		addWindowListener(this);
	}

	
    

	@Override
	public void itemStateChanged(ItemEvent e) {
		
		Object obj = e.getSource();
		Checkbox cb = (Checkbox) obj;
		
		
		// 데이터 확인하기 (오브젝트끼리 확인하기)
		if(obj == cb6) {	// 완전한 체크박스 일 때 오브젝트끼리 비교하기
			cb = (Checkbox) obj;
			if(cb.getState()) {	// 상태가 true일때 (체크했을때)
				JOptionPane.showMessageDialog(null, "체크되었음");
				System.exit(0);
			}else{
			JOptionPane.showMessageDialog(null, "체크 취소되었음");
			}
		}
		

		// 라디오 박스 일때
		else if( obj == cb1 || obj == cb2 || obj == cb3  ){
			if(cb.getState()) {	// 트루였을 때
				label1.setText(cb.getLabel());
			}
		}
		else {
			if(cb.getState()) {	// 트루였을 때
				label2.setText(cb.getLabel());
			}
		}
		
		
		// 메세지 박스 확인하기
//		JOptionPane.showMessageDialog(null, "체크");
	}
	
	
	
	@Override
	public void windowOpened(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowClosing(WindowEvent e) {
		// TODO Auto-generated method stub
		System.exit(0);
	}

	@Override
	public void windowClosed(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowIconified(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowDeiconified(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowActivated(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowDeactivated(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}
}