Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java Swing JTable에서 열 재정렬 방지하는 방법 완벽 가이드

JTableJComponent 클래스의 하위 클래스로, 정보를 여러 개의 행과 열 형태로 표시하는 테이블을 생성할 때 사용하는 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)로 설정하면 기본 동작과 같이 열 재정렬이 다시 활성화됩니다.

실행 결과

Java Swing JTable에서 열 재정렬 방지하는 방법 완벽 가이드

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