JTable은 JComponent 클래스의 하위 클래스로, 여러 행(row)과 열(column)에 정보를 표시하는 테이블을 만들 때 사용됩니다. JTable에서 값을 선택하면 TableModelEvent가 발생하며, 이 이벤트는 TableModelListener 인터페이스를 구현하여 처리할 수 있습니다.
JTable 셀 안에 체크박스를 추가하거나 삽입하려면, 테이블 모델에서 getColumnClass() 메서드를 재정의(오버라이드)하여 해당 열의 클래스 타입을 Boolean.class로 반환하면 됩니다. 그러면 JTable은 Boolean 타입의 데이터를 자동으로 체크박스 형태로 렌더링하고 편집할 수 있게 해줍니다.
예제 코드
import java.awt.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
public class JCheckBoxJTableTest extends JFrame {
private JTable table;
private DefaultTableModel model;
public JCheckBoxJTableTest() {
Random rnd = new Random();
model = new DefaultTableModel(new Object[]{"Check Box1", "Check Box2", "Check Box3"}, 0) {
@Override
public Class getColumnClass(int columnIndex) {
return Boolean.class;
}
};
for (int index = 0; index < 10; index++) {
model.addRow(new Object[]{rnd.nextBoolean()});
}
table = new JTable(model);
add(new JScrollPane(table));
setTitle("JCheckBoxJTable Test");
setSize(375, 250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new JCheckBoxJTableTest();
}
}코드 설명
- DefaultTableModel 익명 클래스: 모델 생성 시 getColumnClass() 메서드를 오버라이드하여 항상 Boolean.class를 반환합니다.
- 랜덤 데이터 생성: 반복문을 통해 무작위 불리언 값(true/false)을 가진 10개의 행을 추가합니다.
- 자동 렌더링: 열의 클래스가 Boolean으로 지정되었기 때문에 JTable이 각 셀을 자동으로 체크박스로 표시하며, 사용자가 클릭하여 값을 전환할 수 있습니다.
실행 결과
프로그램을 실행하면 아래와 같이 세 개의 열에 체크박스가 포함된 테이블이 화면에 나타납니다. 각 셀의 체크박스는 마우스 클릭으로 선택하거나 해제할 수 있습니다.
