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

Java CardLayout 클래스란? 핵심 개념과 사용 예제 총정리

CardLayout은 컴포넌트들을 카드처럼 순차적으로 배치하는 레이아웃 관리자로, 한 번에 하나의 컴포넌트만 화면에 표시됩니다. 각 컴포넌트는 하나의 카드로 취급되며, 마치 카드 덱을 넘기듯이 화면을 전환할 수 있습니다.

CardLayout의 주요 특징

  • 단일 컴포넌트 표시: 다른 레이아웃 관리자들이 컨테이너 안의 모든 컴포넌트를 한꺼번에 표시하려고 하는 것과 달리, CardLayout은 오직 하나의 컴포넌트만 화면에 보여줍니다.
  • 카드 방식의 구성: CardLayout에서 카드는 일반적으로 JPanel 같은 컨테이너에 배치되며, 컴포넌트는 추가된 순서대로 카드 큐(queue)에 저장됩니다.
  • 핵심 메서드: CardLayout의 중요한 메서드로는 first(), last(), next(), previous(), show()가 있으며, 이를 통해 특정 카드로 자유롭게 이동하거나 전환할 수 있습니다.

CardLayout 사용 예제

아래 예제는 세 개의 버튼을 카드 형태로 추가하고, 클릭할 때마다 다음 카드로 전환되도록 구현한 코드입니다.

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

public class CardLayoutTest extends JFrame implements ActionListener {
    CardLayout card;
    JButton b1, b2, b3;
    Container con;

    CardLayoutTest() {
        con = this.getContentPane();
        card = new CardLayout(40, 30);
        con.setLayout(card);

        b1 = new JButton("Java");
        b2 = new JButton("Python");
        b3 = new JButton("Scala");

        b1.addActionListener(this);
        b2.addActionListener(this);
        b3.addActionListener(this);

        con.add("a", b1);
        con.add("b", b2);
        con.add("c", b3);
    }

    public void actionPerformed(ActionEvent e) {
        card.next(con);
    }

    public static void main(String[] args) {
        CardLayoutTest clt = new CardLayoutTest();
        clt.setTitle("CardLayout Test");
        clt.setSize(350, 275);
        clt.setLocationRelativeTo(null);
        clt.setDefaultCloseOperation(EXIT_ON_CLOSE);
        clt.setVisible(true);
    }
}

코드 설명

  • new CardLayout(40, 30): 카드 사이의 수평 간격 40픽셀, 수직 간격 30픽셀을 지정하여 CardLayout 객체를 생성합니다.
  • con.add("a", b1): 각 버튼을 식별자 문자열("a", "b", "c")과 함께 컨테이너에 추가합니다. 이 식별자는 나중에 show() 메서드로 특정 카드를 직접 표시할 때 사용할 수 있습니다.
  • card.next(con): 버튼을 클릭하면 actionPerformed 메서드가 호출되어 다음 카드로 전환됩니다.

실행 결과

위 예제를 실행하면 처음에는 Java 버튼만 창에 표시됩니다. 창을 클릭할 때마다 Python, Scala 버튼이 차례대로 나타나며, 카드를 넘기듯이 컴포넌트가 전환되는 것을 확인할 수 있습니다.

Java CardLayout 클래스란? 핵심 개념과 사용 예제 총정리

이처럼 CardLayout은 마법사(wizard) 형식의 UI, 슬라이드 쇼, 탭 대체 화면 전환 등 한 번에 하나의 화면만 보여주고 싶은 경우에 매우 유용하게 활용됩니다.