back/Java

KH 26일차(CardLayout, GridLayout)

devel0per 2022. 8. 4. 20:53

1) 레이아웃 매니저를 이용해서 컴포넌트 배치

- 컨테이너에 포함된 컴포넌트의 배치를 자동관리

- 종류: BorderLayout, FlowLayout, GridLayout, CardLayout, GridbagLayout

- 기본형: FlowLayout(Panel, Applet), BorderLayout(Window, Dialog, Frame)

 

2) BorderLayout

- 5개의 영역으로 분리(각 영역당 컴포넌트 1개 삽입 가능, Panel 사용하면 여러개 가능)

- 생성자: BorderLayout(int hgap, int vgap) // 좌우 간격, 상하 간격(미선택 가능)

 

3) FlowLayout

- 워드프로세서와 같이 맞춤 정렬 가능(좌, 중간, 우)

- 생성자: FlowLayout(int align, int hgap, int vgap) // 정렬방법, 좌우 간격, 상하 간격

*기본생성자 선택시 가운데 정렬, 상하좌우 5픽셀

 

4) GridLayout

- 컴포넌트를 임의의 행렬로 배치

- 생성자: GridLayout(int row, int col, int hgap, int vgap) // 행, 열, 좌우 간격, 상하 간격

 

package ja_0804;

import java.awt.Button;
import java.awt.Choice;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.List;

public class GridLayout_2 extends Frame{
	
	public GridLayout_2(String title) {
		super(title);
		
		setLayout(new GridLayout(3, 2));
		
		List Mountain = new List(6, true);

		Mountain.add("설악");
		Mountain.add("치악");
		Mountain.add("백두");
		Mountain.add("청명");
		
		Choice flower = new Choice();
		
		flower.add("해바라기");
		flower.add("장미");
		flower.add("진달래");
		flower.add("개나리");
		
 
		add(new Button("Button1"));
		add(Mountain);
		add(flower);
		add(new TextArea("아름다운 사람", 5, 15));
		add(new TextField("TextField"));
		add(new Panel());
		
		setSize(200, 200);
		setVisible(true);
		
	}
	
	public static void main(String[] args) {
		new GridLayout_2("GridLayout_2 TEST");
	}

}

 

5) CardLayout

- 여러 컨테이너를 슬라이드처럼 표시(앨범 혹은 퀴즈 프로그램에 사용)

- 생성자: CardLayout(int hgap, int vgap) 좌우 간격, 상하 간격

 

package ja_0804;

import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class CardLayout_1 extends Frame{
	
	CardLayout card = new CardLayout();
	Panel[] panel = new Panel[5];
	Color[] color = {Color.red, Color.blue, Color.yellow, Color.green, Color.cyan};
	int x, y;
	
	public CardLayout_1(String str) {
		super(str);
		setLayout(card);
		
		
		/*
		 * 	CardLayout
		 *  . 카드 레이아웃은 한개의 컴포넌트를 한개의 컴포넌트로 표현하는 방법입니다.
		 *    여러개의 컴포넌트를 여러개의 카드에 배치하는 경우에 각 카드에 이름을 붙여 사용합니다.
		 *    해당 카드를 출력할 때, 해당 카드의 이름을 show() 메소드로 출력하거나, first(), last(), next() 등의 
		 *    메소드를 이용해 화면을 바꿔가며 출력할 수 있습니다.
		 *    
		 *  . 카드 레이아웃을 사용하는 과정
		 *   . setLayout() 메소드를 이용해 카드 레이아웃 등록
		 *   . 카드 레이아웃에 등록할 Panel을 만든다.
		 *   . add () 메소드를 이용해 패널을 컨테이너에 추가한다.
		 *   . 원하는 카드를 보여주기 위해서 show(), next(), first(), last() 메소드를 사용한다
		 * 
		 * 
		 * 
		 */
		
		MouseHandle mouse = new MouseHandle();
		
		for(int i = 0; i < 5; i++) {
			panel[i] = new Panel();
			panel[i].setBackground(color[i]);
			panel[i].addMouseListener(mouse);
			
			add((new Integer(i)).toString(), panel[i]);
			
		}
		
		setSize(300, 300);
		setVisible(true);
	}
	
	public class MouseHandle extends MouseAdapter{ // 마우스 이벤트 처리
		public void mouseClicked(MouseEvent e) { // 마우스가 클릭될 때
			card.next(CardLayout_1.this);
			System.out.println(e.toString());
		}
	}
	
	public static void main(String[] args) {
		new CardLayout_1("CardLayout 예제");
	}
}