JTable은 JComponent 클래스의 하위 클래스로, 정보를 여러 개의 행과 열 형태로 표시하는 테이블을 생성할 때 사용하는 Swing 컴포넌트입니다. JTable에서 값을 선택하면 TableModelEvent가 발생하며, 이 이벤트는 TableModelListener 인터페이스를 구현하여 처리할 수 있습니다.
기본적으로 JTable에서는 사용자가 마우스로 열 헤더를 드래그하여 열의 순서를 자유롭게 변경할 수 있습니다. 하지만 UI 설계상 열 순서를 고정해야 하는 경우가 많습니다. 이때는 table.getTableHeader().setReorderingAllowed() 메서드를 호출하고 매개변수 값으로 false를 전달하면 됩니다. 이렇게 설정하면 사용자가 열 헤더를 드래그해도 열 순서가 변경되지 않습니다.
열 재정렬 방지 예제 코드
import java.awt.*;
import javax.swing.*;
public final class JTableColumnReorderingTest extends JFrame {
JTable table;
JScrollPane scrollPane;
public JTableColumnReorderingTest() {
setTitle("JTableColumnReordering Test");
String[] columnNames = {"Name", "Mobile Number", "Course"};
Object[][] data = {{"Raja", "123456789", "Java"},
{"Adithya", "456123789", ".Net"},
{"Vineet", "789456123", "Java Script"},
{"Archana", "987456321", "Python"},
{"Krishna", "321456987", "Scala"},
{"Jai", "456321789", "ServiceNow"}};
table = new JTable(data, columnNames);
scrollPane = new JScrollPane(table);
// 열 재정렬 허용하지 않음
table.getTableHeader().setReorderingAllowed(false);
// 열 크기 조절도 허용하지 않음
table.getTableHeader().setResizingAllowed(false);
add(scrollPane);
setSize(375, 250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new JTableColumnReorderingTest();
}
}
코드 설명
위 예제에서 핵심 부분은 다음 두 줄입니다.
- setReorderingAllowed(false): 테이블 헤더에서 열을 드래그하여 순서를 변경하는 기능을 비활성화합니다.
- setResizingAllowed(false): 사용자가 마우스를 드래그하여 열의 너비를 조절하는 기능도 함께 비활성화합니다. 필요하지 않다면 생략해도 무방합니다.
참고로 setReorderingAllowed(true)로 설정하면 기본 동작과 같이 열 재정렬이 다시 활성화됩니다.
실행 결과

프로그램을 실행하면 위와 같이 이름(Name), 휴대폰 번호(Mobile Number), 과목(Course) 세 개의 열로 구성된 테이블이 표시됩니다. 열 헤더에 마우스를 올려 드래그해 보아도 열의 순서가 변경되지 않는 것을 확인할 수 있습니다.