본문 바로가기

JAVA

[JAVA] CardLayout 패널 화면 쉽게 바꾸기

1. CardLayout 소개

  • 화면을 설계하는데 있어서 여러 가지 화면을 한 프레임 안에서 동작시키고 싶을 때 사용하면 유용하다.
  • CardLayout은 마치 카드놀이와 비슷하다. 제일 위에 있는 카드만 보이고 나머지는 보이지 않는다.
  • 카드를 사용하는 방법은 다음과 같다.

 

2. CardLayout 메소드 (카드 뽑기)

first (Container parent) 컨테이너 안에 첫번째 카드를 뽑는다.
next (Container parent) 컨테이너의 다음 카드를 뽑는다. 카드가 마지막 카드라면 첫번 째 카드를 뽑는다.
previous (Container parent) 컨테이너의 이전 카드를 뽑는다. 현재 카드가 첫번째 카드라면 마지막 카드를 뽑는다. 
last (Container parent) 컨테이너의 마지막 카드를 뽑는다.
show (Container parent , String name) addLayoutComponent 메소드를 이용해,  이 레이아웃에 추가된 name(이름을) 이용해 카드를 뽑는다. 

 

3. CardLayout을 이용한 패널 바꾸기 코드

import java.awt.CardLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;
import javax.swing.border.LineBorder;
import javax.swing.border.TitledBorder;

public class CardLayoutDemo extends JPanel {

	public CardLayoutDemo() {
		
		//카드를 담을 카드덱
		JPanel cards = new JPanel(new CardLayout());
				

		// 패널1
		JPanel card1 = new JPanel();
		JButton nextButton = new JButton("Next");
		TitledBorder border1 = new TitledBorder(new LineBorder(Color.black),"This is Panel 1!", TitledBorder.CENTER,TitledBorder.BELOW_TOP);
		card1.setBorder(border1);
		card1.add(nextButton);

		// 패널2
		JPanel card2 = new JPanel();
		JButton previousButton = new JButton("Previous");
		TitledBorder border2 = new TitledBorder(new LineBorder(Color.black),"This is Panel 2!", TitledBorder.CENTER,TitledBorder.BELOW_TOP);
		card2.setBorder(border2);
		card2.add(previousButton);

		// CardLayout에 패널들 추가
		cards.add(card1, "Panel1");
		cards.add(card2, "Panel2");

		// 전체에 추가
		add(cards);
		// 화면 레이아웃 가져오기
		CardLayout cl = (CardLayout) cards.getLayout();

		nextButton.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				cl.next(cards);
			}
		});

		previousButton.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				cl.previous(cards);
			}
		});

	}

	private static void createAndShowGUI() {
		// Create and set up the window.
		JFrame frame = new JFrame("Image Processing");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		CardLayoutDemo cardDemo = new CardLayoutDemo();
		cardDemo.setOpaque(true);
		frame.setContentPane(cardDemo);

		// Display the window.
		frame.pack();
		frame.setVisible(true);
	}

	public static void main(String[] args) {
		// Schedule a job for the event-dispatching thread:
		// creating and showing this application's GUI.
		javax.swing.SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				createAndShowGUI();
			}
		});
	}
}

 

4. 코드 실행화면

그림1. 패널전환

코드에 패널을 추가해서 메소드를 활용해보거나, first last show 메소드도 활용해보길 바랍니다.

여러분들이 CardLayout에 대한 이해에 도움이 됐다면 다행입니다.

 

 

 

 

참고자료 오라클 튜토리얼