
배치 관리자 : 컨테이너 안에 존재하는 컴포넌트들의 크기와 위치를 관리하는 객체
컨테이너마다 하나만 존재 가능
1. 배치 관리자 설정하기
1) 배치 관리자 객체를 생성
2) panel.setLayout(new 배치 관리자()); 로 설정
2. 배치 관리자의 종류
** hGap : 수평 간격
** vGap : 수직 간격
FlowLayout
package ex09;
import javax.swing.*;
import java.awt.*;
public class MyFrame05 extends JFrame {
public MyFrame05() {
setTitle("FlowLayoutTest");
setSize(300, 150);
setLayout(new FlowLayout());
add(new JButton(("Button1")));
add(new JButton(("Button2")));
add(new JButton(("Button3")));
add(new JButton(("Button4")));
add(new JButton(("Button5")));
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
MyFrame05 f = new MyFrame05();
}
}

위쪽에서 아래쪽으로, 왼쪽에서 오른쪽으로 배치
FlowLayout(int align) : 정렬 방법을 지정
FlowLayout(int align, int hGap, int vGap) : 간격을 지정
BorderLayout
package ex09;
import javax.swing.*;
import java.awt.*;
public class MyFrame06 extends JFrame {
public MyFrame06() {
setTitle("BorderLayoutTest");
setSize(300, 150);
setLayout(new BorderLayout());
JButton b1 = new JButton("North");
JButton b2 = new JButton("South");
JButton b3 = new JButton("East");
JButton b4 = new JButton("West");
JButton b5 = new JButton("Center");
add(b1, "North");
add(b2, "South");
add(b3, "East");
add(b4, "West");
add(b5, "Center");
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
MyFrame06 f = new MyFrame06();
}
}

동서남북 중앙의 5개 영역으로 구분하여 배치
BorderLayout(int hGap, int vGap) : 간격을 지정
GridLayout
package ex09;
import javax.swing.*;
import java.awt.*;
public class MyFrame07 extends JFrame {
public MyFrame07() {
setTitle("GridLayoutTest");
setSize(300, 150);
setLayout(new GridLayout(2, 3));
add(new JButton(("Button1")));
add(new JButton(("Button2")));
add(new JButton(("Button3")));
add(new JButton(("B4")));
add(new JButton(("Long Button5")));
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
MyFrame07 f = new MyFrame07();
}
}

동일한 크기의 격자로 나누어 배치
GridLayout(int rows, int cols) :
GridLayout(int rows, int cols, int hGap, int vGap) : 간격을 지정
CardLayout
package ex09;
import javax.swing.*;
import java.awt.*;
public class MyFrame08 extends JFrame {
JButton b1, b2, b3;
Container cPane;
CardLayout layoutm;
public MyFrame08() {
setTitle("BorderLayoutTest");
setSize(300, 150);
cPane = getContentPane();
layoutm = new CardLayout();
setLayout(layoutm);
JButton b1 = new JButton("Card #1");
JButton b2 = new JButton("Card #2");
JButton b3 = new JButton("Card #3");
add(b1);
add(b2);
add(b3);
b1.addActionListener(e->layoutm.next(cPane));
b2.addActionListener(e->layoutm.next(cPane));
b3.addActionListener(e->layoutm.next(cPane));
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
MyFrame08 f = new MyFrame08();
}
}


카드처럼 겹치게 쌓아서 배치
next(container) : 주어진 컨테이너의 다음 카드로 이동
previous(container) : 주어진 컨테이너의 이전 카드로 이동
first(container) : 주어진 컨터이너의 첫 번째 카드로 이동
last(container) : 주어진 컨테이너의 마지막 카드로 이동
3. 절대 위치로 배치하기
package ex09;
import javax.swing.*;
public class MyFrame09 extends JFrame {
JButton b1, b2;
public MyFrame09() {
setTitle("Absolute Position Test");
setSize(300, 150);
setLayout(null);
b1 = new JButton("Button #1");
add(b1);
b1.setLocation(50, 30);
b1.setSize(90, 50);
b2 = new JButton("Button #2");
add(b2);
b2.setBounds(180, 30, 90, 20);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
MyFrame09 f = new MyFrame09();
}
}

1) 배치 관리자를 null로 설정
2) add()메서드를 사용하여 컴포턴트를 컨테이너에 추가
3) setSize(w, h)와 setLocation(x,y)을 이용하여 컴포넌트의 위치와 크기를 지정
setBounds(x, y, w, h)를 사용해도 됨
Share article