JTable은 복잡한 데이터 구조를 화면에 표시하기 위해 JComponent 클래스를 상속받은 스윙(Swing) 컴포넌트입니다. JTable은 MVC(Model View Controller) 디자인 패턴을 기반으로 동작하며, 데이터를 행(row)과 열(column) 형태로 체계적으로 보여줍니다. 또한 TableModelListener, TableColumnModelListener, ListSelectionListener, CellEditorListener, RowSorterListener 등의 리스너 인터페이스를 지원하여 사용자 상호작용을 세밀하게 처리할 수 있습니다.
JTable에서 특정 열마다 배경색과 글자색(전경색)을 다르게 적용하고 싶다면 DefaultTableCellRenderer 클래스를 상속해 셀 렌더러를 직접 커스터마이징하면 됩니다. 이 클래스는 getTableCellRendererComponent() 메서드 하나만 오버라이드하면 되기 때문에 구현 난이도가 크지 않습니다. 아래 예제에서는 세 번째 열에 연회색 배경과 빨간색 글자를 적용하는 과정을 살펴보겠습니다.
예제 코드
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
public class JTableColumnColorTest extends JFrame {
private JTable table;
private TableColumn tColumn;
public JTableColumnColorTest() {
setTitle("JTableColumnColor Test");
table = new JTable(10, 5);
// 세 번째 열(index 2)을 가져와 커스텀 렌더러 적용
tColumn = table.getColumnModel().getColumn(2);
tColumn.setCellRenderer(new ColumnColorRenderer(Color.lightGray, Color.red));
add(new JScrollPane(table), BorderLayout.CENTER);
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new JTableColumnColorTest();
}
}
// JTable의 각 열에 배경색과 전경색을 지정하기 위한 커스텀 렌더러
class ColumnColorRenderer extends DefaultTableCellRenderer {
Color backgroundColor, foregroundColor;
public ColumnColorRenderer(Color backgroundColor, Color foregroundColor) {
super();
this.backgroundColor = backgroundColor;
this.foregroundColor = foregroundColor;
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
Component cell = super.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, column);
cell.setBackground(backgroundColor);
cell.setForeground(foregroundColor);
return cell;
}
}코드 설명
ColumnColorRenderer 클래스는 DefaultTableCellRenderer를 상속하며, 생성자를 통해 배경색과 전경색을 전달받아 내부 필드에 저장합니다. getTableCellRendererComponent() 메서드 안에서는 먼저 부모 클래스의 메서드를 호출해 기본 셀 컴포넌트를 얻은 뒤, setBackground()와 setForeground()로 원하는 색상을 덮어씁니다. 마지막으로 메인 클래스에서는 getColumnModel().getColumn(2)로 세 번째 열을 가져오고, setCellRenderer()를 호출해 해당 열에만 커스텀 렌더러를 등록합니다.
실행 결과

프로그램을 실행하면 10행 × 5열로 구성된 JTable이 나타나며, 세 번째 열만 연회색 배경에 빨간색 텍스트로 표시되는 것을 확인할 수 있습니다. 이 방식을 응용하면 열 인덱스나 셀 값에 따라 조건부로 색상을 바꾸는 등 더욱 다양한 스타일링도 가능합니다.