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

Java에서 JMenu를 활용해 JTabbedPane에 새 탭 동적으로 추가하는 방법

Java Swing 애플리케이션을 개발하다 보면 메뉴 항목을 클릭했을 때 JTabbedPane에 새로운 탭을 동적으로 추가해야 하는 경우가 자주 있습니다. 이 글에서는 JMenu와 JMenuItem의 이벤트 처리를 통해 새 탭을 손쉽게 생성하는 방법을 예제 코드와 함께 살펴보겠습니다.

JTabbedPane이란?

  • JTabbedPaneJComponent 클래스를 확장한 컴포넌트로, 여러 개의 패널에 탭 형태로 쉽게 접근할 수 있도록 도와줍니다.
  • 각 탭은 하나의 컴포넌트와 연결되며, 사용자가 해당 탭을 선택하면 연결된 컴포넌트가 화면에 표시됩니다.
  • 탭이 선택될 때마다 ChangeListener 인터페이스를 통해 상태 변경 이벤트를 감지할 수 있습니다.
  • JTabbedPane의 주요 메서드로는 add(), addTab(), fireStateChanged(), createChangeListener(), setSelectedIndex(), getTabCount() 등이 있습니다.

구현 예제

아래 예제는 메뉴바의 "Create new tab" 메뉴 항목을 클릭할 때마다 새로운 탭이 추가되는 간단한 Swing 애플리케이션입니다.

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

public class JTabbedPaneTest extends JFrame implements ActionListener {
    JTabbedPane tabbedPane;
    int ntabs = 0;

    public JTabbedPaneTest() {
        getContentPane().setLayout(new BorderLayout());
        tabbedPane = new JTabbedPane();
        createTab();
        getContentPane().add(BorderLayout.CENTER, tabbedPane);
        setJMenuBar(createMenuBar());
        tabbedPane.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent ce) {
                System.out.println("Tab " + (tabbedPane.getSelectedIndex() + 1) + " is selected");
            }
        });
        setTitle("JTabbedPane Test");
        setLocationRelativeTo(null);
        setSize(new Dimension(350, 275));
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    protected JMenuBar createMenuBar() {
        JMenuBar menuBar = new JMenuBar();
        JMenu menu = new JMenu("JTabbedPane");
        JMenuItem menuItem = new JMenuItem("Create new tab");
        menuItem.addActionListener(this);
        menu.add(menuItem);
        menuBar.add(menu);
        return menuBar;
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("Create new tab")) {
            createTab();
        }
    }

    protected void createTab() {
        ntabs++;
        tabbedPane.addTab("Tab #" + ntabs, new JLabel("Tab #" + ntabs));
    }

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

코드 핵심 포인트

  • createMenuBar() 메서드: JMenuBar와 JMenu를 생성하고, "Create new tab"이라는 JMenuItem을 추가한 뒤 ActionListener를 등록합니다.
  • actionPerformed() 메서드: 메뉴 항목이 클릭되면 getActionCommand()로 이벤트를 확인하고 createTab()을 호출합니다.
  • createTab() 메서드: 탭 번호(ntabs)를 증가시키고 addTab() 메서드를 사용해 새 탭과 함께 JLabel 컴포넌트를 추가합니다.
  • ChangeListener: 탭이 선택될 때마다 선택된 탭의 인덱스를 콘솔에 출력하여 상태 변경을 확인할 수 있습니다.

실행 결과

프로그램을 실행하면 초기에 "Tab #1"이 표시되며, 메뉴에서 "Create new tab"을 클릭할 때마다 "Tab #2", "Tab #3"처럼 새로운 탭이 순차적으로 추가됩니다. 또한 탭을 전환할 때마다 콘솔에 선택된 탭 정보가 출력됩니다.

Java에서 JMenu를 활용해 JTabbedPane에 새 탭 동적으로 추가하는 방법

마무리

이처럼 JMenu의 이벤트 리스너와 JTabbedPane의 addTab() 메서드를 조합하면 사용자 요청에 따라 탭을 유연하게 추가할 수 있습니다. 이 방식은 텍스트 에디터, 웹 브라우저 스타일의 인터페이스 등 다양한 데스크톱 애플리케이션에서 활용할 수 있는 기본적인 패턴이므로 꼭 익혀두시기 바랍니다.