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

Java Swing JTable에서 테이블 헤더를 표시하거나 숨기는 방법

JTable은 복잡한 데이터 구조를 화면에 표시하기 위해 JComponent 클래스를 상속받은 컴포넌트입니다. JTable은 모델-뷰-컨트롤러(MVC) 디자인 패턴을 따르며, 데이터를 행과 열 형태로 깔끔하게 보여줄 수 있습니다.

DefaultTableModel 클래스는 AbstractTableModel의 하위 클래스로, JTable에 행과 열을 동적으로 추가할 때 사용됩니다. 또한 DefaultTableCellRenderer 클래스는 JLabel 클래스를 확장하여 셀 안에 이미지, 색상이 적용된 텍스트 등을 넣을 수 있게 해줍니다.

JTable의 테이블 헤더는 아주 간단한 방법으로 제어할 수 있습니다. JCheckBox의 선택을 해제하면 헤더가 숨겨지고, 체크박스를 클릭하면 헤더가 다시 표시되도록 구현할 수 있습니다. 핵심은 JScrollPane의 getColumnHeader() 메서드로 반환되는 뷰포트의 가시성(visibility)을 변경하는 것입니다.

예제 코드

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

public final class JTableHeaderHideTest extends JPanel {
   private final String[] columnNames = {"String", "Integer", "Boolean"};
   private final Object[][] data = {{"Tutorials Point", 100, true}, {"Tutorix", 200, false},
                                    {"Tutorials Point", 300, true}, {"Tutorix", 400, false}};
   private final TableModel model = new DefaultTableModel(data, columnNames) {
      @Override
      public Class getColumnClass(int column) {
         return getValueAt(0, column).getClass();
      }
   };
   private final JTable table = new JTable(model);
   private final JScrollPane scrollPane = new JScrollPane(table);

   public JTableHeaderHideTest() {
      super(new BorderLayout());
      add(scrollPane);
      JCheckBox check = new JCheckBox("JTableHeader visible: ", true);
      check.addActionListener(ae -> {
         JCheckBox cb = (JCheckBox) ae.getSource();
         scrollPane.getColumnHeader().setVisible(cb.isSelected());
         scrollPane.revalidate();
      });
      add(check, BorderLayout.NORTH);
   }

   public static void main(String[] args) {
      JFrame frame = new JFrame("JTableHeaderHide Test");
      frame.setSize(375, 250);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(new JTableHeaderHideTest());
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }
}

코드 설명

  • DefaultTableModel: 문자열, 정수, 불리언 타입의 데이터를 담은 행과 열을 정의합니다. getColumnClass()를 오버라이드하면 Boolean 값이 체크박스로 렌더링됩니다.
  • JCheckBox 액션 리스너: 체크박스의 선택 상태에 따라 scrollPane.getColumnHeader().setVisible()를 호출하여 테이블 헤더를 표시하거나 숨깁니다.
  • revalidate(): 가시성 변경 후 레이아웃을 다시 계산하여 화면에 즉시 반영합니다.

실행 결과

테이블 헤더가 표시된 상태

Java Swing JTable에서 테이블 헤더를 표시하거나 숨기는 방법

테이블 헤더가 숨겨진 상태

Java Swing JTable에서 테이블 헤더를 표시하거나 숨기는 방법

체크박스를 클릭할 때마다 테이블 상단의 헤더 영역이 나타났다 사라지는 것을 확인할 수 있습니다. 이 방법은 사용자가 화면 공간을 조절하고 싶을 때 유용하게 활용할 수 있습니다.