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

Java JTable에서 특정 열 기준으로 정렬하는 방법

JTable은 복잡한 데이터 구조를 화면에 표시하기 위해 사용되는 JComponent 클래스의 하위 클래스입니다. JTable 컴포넌트는 MVC(Model View Controller) 디자인 패턴을 따르며, 데이터를 행과 열 형태로 깔끔하게 보여줍니다.

JTable은 TableModelListener, TableColumnModelListener, ListSelectionListener, CellEditorListener, RowSorterListener 등 다양한 리스너 인터페이스를 통해 이벤트를 처리할 수 있습니다.

setAutoCreateRowSorter()로 열 정렬 구현하기

JTable에서 특정 열을 기준으로 정렬하려면 setAutoCreateRowSorter() 메서드를 호출하고 인자로 true를 전달하면 됩니다. 이 설정을 적용하면 사용자가 테이블 헤더(열 제목)를 클릭할 때마다 해당 열을 기준으로 오름차순 또는 내림차순 정렬이 자동으로 수행됩니다.

예제 코드

import java.awt.*;
import javax.swing.*;

public final class JTableSorterTest extends JFrame {
   private JTable table;
   private JScrollPane scrollPane;

   public JTableSorterTest() {
      setTitle("JTableHeaderHide Test");
      String[] columnNames = {"Name", "Age", "City"};
      Object[][] data = {
         {"Raja", "35", "Hyderabad"},
         {"Adithya", "25", "Chennai"},
         {"Vineet", "23", "Mumbai"},
         {"Archana", "32", "Pune"},
         {"Krishna", "30", "Kolkata"}
      };
      table = new JTable(data, columnNames);
      scrollPane = new JScrollPane(table);
      table.setAutoCreateRowSorter(true); // 특정 열 기준 행 정렬 활성화
      add(scrollPane, BorderLayout.CENTER);
      setSize(375, 250);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setLocationRelativeTo(null);
      setVisible(true);
   }

   public static void main(String[] args) {
      new JTableSorterTest();
   }
}

실행 결과

Java JTable에서 특정 열 기준으로 정렬하는 방법

위 코드를 실행하면 이름, 나이, 도시 열의 헤더를 클릭할 때마다 해당 열의 데이터가 정렬됩니다. 같은 헤더를 다시 클릭하면 정렬 방향이 오름차순에서 내림차순으로 전환됩니다.

참고: TableRowSorter를 활용한 세부 제어

기본 정렬 기능만으로는 부족하고 더 세밀한 제어가 필요하다면 TableRowSorter 객체를 직접 생성하여 사용할 수도 있습니다.

TableRowSorter<TableModel> sorter = new TableRowSorter<>(table.getModel());
table.setRowSorter(sorter);
sorter.setSortKeys(List.of(new RowSorter.SortKey(0, SortOrder.ASCENDING))); // 첫 번째 열 기준 오름차순 정렬

이처럼 setAutoCreateRowSorter()는 간단한 정렬 기능을 손쉽게 추가할 수 있는 가장 빠른 방법이며, 별도의 외부 라이브러리 없이 Swing에서 기본적으로 제공되는 기능입니다.