각진 세상에 둥근 춤을 추자

[Java] Swing - Container Layout Manager 본문

Java

[Java] Swing - Container Layout Manager

circle.j 2022. 10. 10. 22:32

 

 

 

컨테이너 배치 관리자 (Container Layout Manager)

 

  • 각 컨테이너마다 하나의 배치관리자가 존재한다. 
  • 컨테이버 배치관리자는 컨테이너에 부착되는 컴포넌트의 위치와 크기를 결정한다. 

 

 

컨테이너 배치 관리자의 유형은 다음과 같다.

  1. FlowLayout 배치관리자: 왼쪽 → 오른쪽 
  2. BorderLayout 배치관리자: 동, 서, 남, 북, 중앙 
  3. GridLayout 배치관리자: 설정한 크기의 격자로 나눔 
  4. CardLayout 배치관리자: 카드를 쌓듯이 컴포넌트를 겹쳐 배치 

 

배치관리자 설정

JPanel p = new JPanel();
p.setLayout(new BorderLayout());

 


   1. FlowLayout     

 

setLayout(new FlowLayout());

 

[예제1] FlowLayout

package layout;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class FlowLayoutFrame extends JFrame{
	
	public FlowLayoutFrame(String title, int width, int height) {
		setTitle(title);
		setSize(width, height);
		setLocation(2500,300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLayout(new BorderLayout());
		
		// 레이아웃 
		setLayout(new FlowLayout());
		
		// 컴포넌트 추가 
		JButton b1 = new JButton("Button1");
		add(b1);
		
		JButton b2 = new JButton("Button2");
		add(b2);
		
		JButton b3 = new JButton("Button3");
		add(b3);
		
		JButton b4 = new JButton("Button4");
		add(b4);
		
		JButton b5 = new JButton("Button5");
		add(b5);
		
		setVisible(true);
	}
	
	public static void main(String[] args) {
		new FlowLayoutFrame("ContentPaneFrame", 300, 200);
	}
	
}

 

 

[예제2] FlowLayout 생성자

setLayout(new FlowLayout(int align, int hGap, int vGap));
 
  -  align: 컴포넌트 정렬 방법

  • 좌측: FlowLayout.LEFT
  • 우측: FlowLayout.RIGHT
  • 중앙: FlowLayout.CENTER (default)
  - hGap: 좌우 컴포넌트 사이의 수평 간격 (default: 5px)
  - vGap: 상하 컴포넌트 사이의 수평 간격 (default: 5px) 

 

align: left - center - right 

 


   2. BorderLayout     

 

 

setLayout(new BorderLayout());
BorderLayout(int hGap, int vGap);

 

[예제]

package layout;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.border.Border;

public class BorderLayoutFrame extends JFrame{
	
	public BorderLayoutFrame(String title, int width, int height) {
		setTitle(title);
		setSize(width, height);
		setLocation(2500,300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLayout(new BorderLayout());
		
		// 레이아웃 
		setLayout(new BorderLayout(20, 20));
		
		// 컴포넌트 추가 
		JButton b1 = new JButton("CENTER");
		add(b1, BorderLayout.CENTER);
		
		JButton b2 = new JButton("WEST");
		add(b2, BorderLayout.WEST);
		
		JButton b3 = new JButton("EAST");
		add(b3, BorderLayout.EAST);
		
		JButton b4 = new JButton("NORTH");
		add(b4, BorderLayout.NORTH);
		
		JButton b5 = new JButton("SOUTH");
		add(b5, BorderLayout.SOUTH);
		
		setVisible(true);
	}
	
	public static void main(String[] args) {
		new BorderLayoutFrame("ContentPaneFrame", 300, 200);
	}
	
}

 

 


   3. GridLayout     

 

 

setLayout(new GridLayout());

 

  • rows: 행 (default: 1)
  • cols: 열 (default: 1)
  • hGap: 좌우 컴포넌트 사이의 수평 간격 (default: 5px)
  • vGap: 상하 컴포넌트 사이의 수평 간격 (default: 5px) 

 

GridLayout(int rows, int cols);
GridLayout(int rows, int cols, int hGap, vGap);

 

[예제]

package layout;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;

public class GridLayoutFrame extends JFrame{
	
	public GridLayoutFrame(String title, int width, int height){
		setTitle(title);
		setSize(width, height);
		setLocation(2500, 300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		// 레이아웃
		setLayout(new GridLayout(2, 3));
		
		// 컴포넌트
		JButton b1 = new JButton("1");
		add(b1);
		JButton b2 = new JButton("2");
		add(b2);
		JButton b3 = new JButton("3");
		add(b3);
		JButton b4 = new JButton("4");
		add(b4);
		JButton b5 = new JButton("5");
		add(b5);
		JButton b6 = new JButton("6");
		add(b6);
		
		
		setVisible(true);
	}
	
	
	public static void main(String[] args) {
		new GridLayoutFrame("ContentPaneFrame", 300, 200);
	}
	
}

 


   4. 배치관리자 제거    

 

프로그램에서 개발자 임의로 직접 컴포넌트의 크기와 위치를 결정하고 할 때 배치관리자를 제거할 수 있다. 

주로 게임 프로그램과 같이 시간, 마우스, 키보드 입력에 따라 위치와 크기가 수시로 변하는 경우에 사용한다. 

setLayout(null);
JButton b1 = new JButton("1");

// 크기 조절
b1.setSize(int width, int height);

// 위치 조절
b1.setLocation(int x, int y);

// 크기, 위치 조절
b1.setBounds(int x, int y, int width, int height);

add(b1);

 

[예제]

package layout;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;

public class NoLayoutFrame extends JFrame{
	
	public NoLayoutFrame(String title, int width, int height){
		setTitle(title);
		setSize(width, height);
		setLocation(2500, 300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		// 레이아웃
		setLayout(null);
		
		// 컴포넌트
		JButton b1 = new JButton("1");
		b1.setSize(100, 50);
		b1.setLocation(10, 10);
		add(b1);
		
		JButton b2 = new JButton("2");
		b2.setSize(100, 50);
		b2.setLocation(120, 10);
		add(b2);
		
		JButton b3 = new JButton("3");
		b3.setBounds(230, 10, 100, 50);
		add(b3);
		
		
		JButton b4 = new JButton("4");
		b4.setBounds(280, 35, 100, 50);
		add(b4);
		
		JButton b5 = new JButton("5");
		b5.setBounds(230, 60, 100, 50);
		add(b5);
		
		JButton b6 = new JButton("6");
		b6.setBounds(300, 200, 100, 50);
		add(b6);
		
		
		setVisible(true);
	}
	
	
	public static void main(String[] args) {
		new NoLayoutFrame("NoLayout Frame", 300, 200);
	}
	
}

 

 

 

 

'Java' 카테고리의 다른 글

[InteillJ] InteillJ Maven WAR 파일 생성  (0) 2024.03.05
[Java] Swing - 이벤트  (0) 2022.10.24
[Java] Swing - JFrame  (0) 2022.10.10
[Java] GUI 프로그래밍  (0) 2022.10.10
[Java] Socket을 이용한 Client/Server 채팅 프로그램  (0) 2022.10.03