본문 바로가기
Back-End/Java

[Java] Swing - Layout(배치관리자)

by 찐코딩 2021. 9. 29.

 * 배치관리자(Layout)

 - 화면(Frame)에 컴포넌트들을 배치하는 방법을 알려주는 관리자
 - 대표적인 배치관리자의 종류
 1) FlowLayout
 2) BorderLayout
 3) GridLayout
 4) CardLayout

 

 * 1. FlowLayout 배치관리자

 - 배치 : 좌 -> 우
 - 상단 중앙에 컴포넌트를 배치한다
 - 화면이 넘칠 경우에는 바로 밑(아리) 중앙에 배치가 됨.
 - 배치관리자를 지정하지 않은 경우, default로 FlowLayout 배치 관리자로 배치함.

 

 

* 2.BorderLayout 배치관리자

 - 배치 : 동쪽, 서쪽, 남쪽, 북쪽, 중앙

 

 

* 3. GridLayout 배치관리자

 - 객자 모양의 배치관리자
 - 행과 열로 화면이 구성됨
 - 기준 : 무조건 행 기준

 

FlowLayout 배치관리자 예제

package sist;

import java.awt.FlowLayout;

import javax.swing.*;

public class Ex18_FlowLayout extends JFrame{
	
	public Ex18_FlowLayout() {
		
		// 프레임 이름 지정
		setTitle("FlowLayout 배치관리자");
		
		// 컨테이너 생성
		JPanel container = new JPanel();
		
		// 컴포넌트 생성
		JButton button1 = new JButton("버튼1");
		JButton button2 = new JButton("버튼2");
		JButton button3 = new JButton("버튼3");
		JButton button4 = new JButton("버튼4");
		
		// 컨테이너에 컴포넌트 올리기
		/*
		형식) new FlowLayout()
		 	 new FlowLayout(정렬, 수평간격, 수직간격)
		 		- 정렬 : default값은 정중앙
		 			   left, right등으로 정렬을 바꿀 수 있다
				- 수평간격 : 좌우 컴포넌트 사이의 간격.픽셀단위 - 기본값은 5px
		 
		 */
		container.setLayout(new FlowLayout(FlowLayout.CENTER, 2, 10));
		container.add(button1); container.add(button2);
		container.add(button3); container.add(button4);
		
		// 프레임에 컨테이너 올리기
		add(container);
		
		// 프레임 위치, 크기 지정
		setBounds(200, 200, 300, 300);
		
		// 프레임 x 버튼 유효화
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		// 프레임 보이기
		setVisible(true);
		
	}
	
	

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

}

 

BorderLayout 배치관리자 예제

package sist;

import java.awt.*;

import javax.swing.*;

public class Ex19_BorderLayout extends JFrame{
	
	public Ex19_BorderLayout() {
		
		// 프레임 이름 지정
		setTitle("BorderLayout 배치관리자");
		
		// 컨테이너 생성
		JPanel container = new JPanel();
		
		// 컴포넌트 생성
		JButton button1 = new JButton("North");
		JButton button2 = new JButton("South");
		JButton button3 = new JButton("겹치면 어떻게 될까");
		JButton button4 = new JButton("East");
		JButton button5 = new JButton("West");
		JButton button6 = new JButton("Center");
		
		/*
		 2. 컨테이너에 컴포넌트 올리기
		
		border layout 관리자로 올리기
		 형식) new BorderLayout()
				new BorderLayout(수평간격, 수직간격)
				- 수평간격 : 좌우 컴포넌트 사이의 간격(픽셀단위), 기본값 0
				- 수직간격 : 상하 컴포넌트 사이의 간격(픽셀단위), 기본값 0
											
		*/
		container.setLayout(new BorderLayout(20, 20));
		// button1은 북쪽에
		// 겹치게 배치를 하면 어떻게 될까
		container.add(button1, BorderLayout.NORTH);
		container.add(button3, BorderLayout.NORTH);
		// 실행시켜보면 나중에 생성된 버튼 하나만 나오는 것을 볼 수 있다.
		
		// button2는 남쪽에
		container.add(button2, BorderLayout.SOUTH);
		// button3는 동쪽에
		container.add(button4, BorderLayout.EAST);
		// button5는 서쪽에
		container.add(button5, BorderLayout.WEST);
		
		// button6은 가운데에
		container.add(button6, BorderLayout.CENTER);
		
		
		// 3. 프레임에 컨테이너 올리기
		add(container);
		
		// 프레임 위치, 크기 지정
		setBounds(200, 200, 300, 300);
		
		// 프레임 x 버튼 유효화
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		// 프레임 보이기
		setVisible(true);
		
	}

	public static void main(String[] args) {

		new Ex19_BorderLayout();	// 생성자 호출
	}

}

겹치게 놓는 경우 나중에 올린 버튼만 올라가는 것을 볼 수 있다.

 

GridLayout 배치관리자 예제

package sist;

import java.awt.*;

import javax.swing.*;

public class Ex20_GridLayout extends JFrame{
	
	public Ex20_GridLayout() {
		
		setTitle("GridLayout 배치관리자");
		
		JPanel container = new JPanel();
		
		// 컴포넌트 생성
		JButton button1 = new JButton("1");
		JButton button2 = new JButton("2");
		JButton button3 = new JButton("3");
		JButton button4 = new JButton("4");
		JButton button5 = new JButton("5");
		JButton button6 = new JButton("6");
		JButton button7 = new JButton("7");
		JButton button8 = new JButton("8");
		JButton button9 = new JButton("9");
		JButton button10 = new JButton("*");
		JButton button11 = new JButton("0");
		JButton button12 = new JButton("#");
		
		// 2. 컨테이너에 컴포넌트 올리기
		// 그리드레이아웃 관리자로 올리기
		/*
		 형식) new GridLayout(행, 열)
			  new GridLayout(행, 열, 수평간격, 수직간격)
				- 수평간격 : 좌우 컴포넌트 사이의 간격(픽셀단위), 기본값 0
				- 수직간격 : 상하 컴포넌트 사이의 간격(픽셀단위), 기본값 0
		*/
		// 4행 3열짜리 GridLayout 생성
		// 간격은 5픽셀씩 둠
		container.setLayout(new GridLayout(4,3,5,5));	
		
		container.add(button1); container.add(button2); container.add(button3);
		container.add(button4); container.add(button5); container.add(button6); 
		container.add(button7); container.add(button8); container.add(button9);
		container.add(button10); container.add(button11); container.add(button12);
				
		// 3. 프레임에 컨테이너 올리기
		add(container);
		
		// 프레임 위치, 크기 지정
		setBounds(200, 200, 300, 300);
		
		// 프레임 x 버튼 유효화
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		// 프레임 보이기
		setVisible(true);
				
	}

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

	}

}

 

댓글