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

Java에서 하나의 JTabbedPane에 여러 탭을 삽입하는 방법


JTabbedPane이란?

  • JTabbedPaneJComponent 클래스를 확장하는 스윙(Swing) 컴포넌트로, 한 번에 하나의 탭만 화면에 표시됩니다.
  • 각 탭은 하나의 컴포넌트와 연결되어 있으며, 사용자가 해당 탭을 선택하면 연결된 컴포넌트가 나타납니다.
  • JTabbedPane은 탭이 선택될 때 ChangeListener 인터페이스를 통해 상태 변경 이벤트를 발생시킬 수 있습니다.
  • 또한 하나의 JTabbedPane 안에 여러 개의 탭을 삽입하는 것도 가능합니다. JTabbedPane의 주요 메서드로는 addTab(), fireStateChanged(), getTabPlacement(), setSelectedIndex(), getTabCount() 등이 있습니다.

아래 예제는 재귀 호출을 활용해 하나의 JTabbedPane 안에 다른 JTabbedPane을 중첩하여 배치함으로써, 여러 개의 탭을 계층적으로 삽입하는 방법을 보여줍니다. 각 단계마다 탭의 위치(TOP → RIGHT → BOTTOM → LEFT)가 순환적으로 변경되어 시각적으로 흥미로운 구조를 만듭니다.

예제 코드

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

public class NestedJTabbedPaneTest extends JFrame {
   public NestedJTabbedPaneTest() {
      setTitle("Nested JTabbedPane test");
      setLayout(new BorderLayout());
      JTabbedPane tabbedPane = new JTabbedPane();
      add(BorderLayout.CENTER, tabbedPane);
      createNestedTab(tabbedPane, 1);
      setSize(375, 250);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setLocationRelativeTo(null);
      setVisible(true);
   }
   protected void createNestedTab(JTabbedPane jtp, int count) {
      if (count > 5) return;
      JTabbedPane tp = new JTabbedPane();
      tp.setTabPlacement(getNextOrientation(jtp.getTabPlacement()));
      jtp.addTab("Tab #" + count, tp);
      createNestedTab(tp, count+1);
   }
   private int getNextOrientation(int tabPlacement) {
      if (tabPlacement == JTabbedPane.TOP) return JTabbedPane.RIGHT;
      if (tabPlacement == JTabbedPane.RIGHT) return JTabbedPane.BOTTOM;
      if (tabPlacement == JTabbedPane.BOTTOM) return JTabbedPane.LEFT;
      else return JTabbedPane.TOP;
   }
   public static void main(String []args) {
      new NestedJTabbedPaneTest();
   }
}

실행 결과

Java에서 하나의 JTabbedPane에 여러 탭을 삽입하는 방법

프로그램을 실행하면 'Tab #1'부터 'Tab #5'까지 총 5개의 탭이 중첩된 형태로 생성되며, 각 탭의 제목 위치가 위쪽, 오른쪽, 아래쪽, 왼쪽으로 번갈아 배치되는 것을 확인할 수 있습니다. 이처럼 createNestedTab() 메서드를 재귀적으로 호출하면 원하는 깊이만큼 탭을 손쉽게 추가할 수 있습니다.