JCheckbox, 체크박스 컴포넌트
JCheckBox를 이용하면 선택(selected)과 해제(deselected)의 두 상태만 가지는 체크박스 컴포넌트(줄여 체크박스)를 만들 수 있습니다. 체크박스는 체크박스 문자열과 체크박스 이미지로 구성합니다.
체크박스 컴포넌트 생성
체크박스는 다음 생성자를 이용하여 생성하며, 디폴트가 해제 상태입니다.
JCheckBox() // 빈 체크박스
JCheckBox(String text) // 문자열 체크박스
JCheckBox(String text, boolean selected) // 문자열 체크박스
JCheckBox(Icon image) // 이미지 채크박스
JCheckBox(Icon image, boolean selected) // 이미지 체크박스
JCheckBox(String text, Icon image) // 문자열과 이미지를 가진 체크박스
JCheckBox(String text, Icon image, boolean selected) // 문자열과 이미지를 가진 체크박스
- selected: true이면 선택 상태로 초기화, 디폴트는 해제 상태
문자열 체크박스
"사과" 문자열을 가진 체크박스를 만드는 코드는 다음과 같고, 해제 상태로 생성됩니다.
JCheckBox apple = new JCheckBox("사과");
"배" 문자열을 가지고 처음부터 선택 상태인 체크박스는 다음 코드로 생성합니다.
JCheckBOx pear = new JCheckBox("배", true);
이미지 체크박스
이미지 체크박스는 체크박스 모양 대신, 선택 상태 때 출력할 별도의 이미지를 필요로 합니다. 선택 상태 이미지는 JCheckBox의 setSelectedIcon(ImageIcon) 메서드를 이용하여 등록합니다.
ImageIcon cherryIcon = new ImageIcon("images/cherry.jpg"); // 해제 상태 이미지
ImageIcon selectedCherryImage = new ImageIcon("images/selectedCherry.jpg"); // 선택 상태 이미지
CheckBox cherry = new JCheckBox("채리", cherryIcon); // 해제 상태 이미지만 가진 체크 박스 생성
cherry.setSelectedIcon(selectedCherryIcon); // 선택 상태 이미지 등록
이미지 체크박스의 경우 다음과 같이 체크박스의 외곽선이 보이도록 하여 체크박스 경력을 분명히 할 수 있습니다.
cherry.setBorderPainted(true);
체크박스 생성 예
import javax.swing.*;
import java.awt.*;
public class CheckBoxEx extends JFrame {
public CheckBoxEx() {
setTitle("체크박스 만들기 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
// 이미지 체크박스에 사용할 2개의 이미지 객체 생성
ImageIcon cherryIcon = new ImageIcon("images/cherry.jpg"); // 객체 상태 이미지
ImageIcon selectedCherryIcon = new ImageIcon("images/selectedCherry.jpg");
// 3개의 체크박스 생성
JCheckBox apple = new JCheckBox("사과");
JCheckBox pear = new JCheckBox("배", true);
JCheckBox cherry = new JCheckBox("체리", cherryIcon);
cherry.setBorderPainted(true); // 체크박스 외곽선이 보이도록 설정
cherry.setSelectedIcon(selectedCherryIcon); // 선택 상태 이미지 등록
// 컨텐트 팬에 3개의 체크박스 부착
c.add(apple);
c.add(pear);
c.add(cherry);
setSize(250, 150);
setVisible(true);
}
public static void main(String[] args) {
new CheckBoxEx();
}
}
[실행결과]


.CheckBox에서 Item 이벤트 처리
Item 이벤트는 체크박스나 라디오버튼의 선택 상태가 바뀔 때 발생하는 이벤트입니다. 이미 선택 상태인 라디오 버튼을 누르는 경우 선택 상태에 대한 변화가 없기 때문에 Item 이벤트는 발생하지 않습니다. 선택/해제 행위는 대부분 마우스 클릭으로 이루어지지만, 다음과 같이 자바 코드로 살행할 수 있습니다.
JCheckBox c = new JCheckBox("사과");
c.setSelected(true); // 선택 상태로 설정, 해제 상태로 설정
마우스로 선택하든 프로그렘 코드로 실행하든 선택 상태가 변할 때 Item 이벤트가 발생합니다.
ItemListener 인터페이스
Item 이벤트 리스너는 ItemListener 인터페이스를 상속받아 만들며, 다음 하나의 메서드로 구성됩니다.
void itemStateChanged(ItemEvent e) // 체크박스의 선택/해제 상태가 변하는 경우 호출
이 메소드는 체크박스의 선택 상자에 변화가 일어나면 호출됩니다. 이 메서드가 호출되는 시점에서는, 이미 체크박스는 화면에서 상태가 바뀌어 있음을 기억하기 바랍니다.
ItemEvent 객체
Item 이벤트가 발생하면 ItemEvent 객체가 생성되어 itemStateChanged()의 인자로 전달됩니다. 개발자는 ItemEvent 객체의 다음 메서드를 호출하여 채크 상태의 변화와 이벤트 소스 컴포넌트를 알아낼 수 있습니다.
int getStateChange() // 리턴 값의 선택된 경우 ItemEvent.SELECTED, 해제된 경우 ItemEvent.DESELCTED
Object getItem() // 이벤트를 발생시킨 아이템 객체 리턴, 체크박스의 경우 JCheckBox 컴포넌트의 레퍼런스 리턴
체크박스 컴포넌트에 ItemListene 리스너 달기
CheckBox의 addItemListener() 메서드를 이용하여 다음과 같이 등록합니다.
checkbox.addItemListener(new MyItemListener());
ItemEvent을 활용하여 가격 합산하기
import javax.swing.*;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.lang.module.Configuration;
public class CheckBoxItemEventEx extends JFrame {
private JCheckBox [] fruits = new JCheckBox[3]; // 체크박스 배열
private String [] names = {"사과", "배", "체리"}; // 체크박스 문자열로 사용할 문자열 배열
private JLabel sumLabel; // 계산 합을 출력할 레이블
public CheckBoxItemEventEx() {
setTitle("체크박스와 ItemEvent 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
c.add(new JLabel("사과 100월, 배 500원, 채리 20000원"));
// 3개의 체크박스를 생성. 컴포넌트팬에 삽입하고 Item 리스너 등록
MyEventListener listener = new MyEventListener();
for (int i = 0; i < fruits.length; i++) {
fruits[i] = new JCheckBox(names[i]); // names[]의 문자열로 체크박스 생성
fruits[i].setBorderPainted(true); // 체크박스 외곽선 보이도록 생성
c.add(fruits[i]); // 컨텐트 팬에 체크박스 삽입
fruits[i].addItemListener(listener); // 체크박스에 Item 리스너 등록
}
sumLabel = new JLabel("현재 0원 입니다.");
c.add(sumLabel);
setSize(250, 200);
setVisible(true);
}
class MyEventListener implements ItemListener {
private int sum = 0; // 가격의 합
// 체크박스의 선택 상태가 변하면 itemStateChanged()가 호출됨
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) { // 선택 경우
if (e.getItem() == fruits[0]) // 사과 체크박스
sum += 100;
else if (e.getItem() == fruits[1]) // 배 체크박스
sum += 500;
else // 체리 체크박스
sum += 20000;
} else { // 해체 경우
if (e.getItem() == fruits[0]) // 사과 체크박스
sum -= 100;
else if (e.getItem() == fruits[1]) // 배 체크박스
sum -= 500;
else // 체리 체크박스
sum -= 20000;
}
sumLabel.setText("현재 " + sum + "원 입니다."); // 합 출력
}
}
public static void main(String[] args) {
new CheckBoxItemEventEx();
}
}
[실행결과]


'프로그래밍 언어 > JAVA' 카테고리의 다른 글
| JTextField, 텍스트필드 컴포넌트 (0) | 2025.07.04 |
|---|---|
| JRadioButton, 라디오버튼 컴포넌트 (1) | 2025.07.01 |
| JButton, 버튼 컴포넌트 (1) | 2025.06.25 |
| JLabel, 레이블 컴포넌트 (0) | 2025.06.23 |
| 스윙 컴포넌트 소개 (2) | 2025.06.20 |