각진 세상에 둥근 춤을 추자
[Java] Swing - Container Layout Manager 본문
컨테이너 배치 관리자 (Container Layout Manager)
- 각 컨테이너마다 하나의 배치관리자가 존재한다.
- 컨테이버 배치관리자는 컨테이너에 부착되는 컴포넌트의 위치와 크기를 결정한다.
컨테이너 배치 관리자의 유형은 다음과 같다.
- FlowLayout 배치관리자: 왼쪽 → 오른쪽
- BorderLayout 배치관리자: 동, 서, 남, 북, 중앙
- GridLayout 배치관리자: 설정한 크기의 격자로 나눔
- 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: 컴포넌트 정렬 방법
- vGap: 상하 컴포넌트 사이의 수평 간격 (default: 5px) |
|
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 |