9.4 배치 관리자
: 컨테이너 안에 존재하는 컴포넌트들의 크기와 위치를 관리하는 객체

(1) new 연산자를 이용하여 배치 관리자 객체를 만든다.
(2) 이 객체를 컨테이너의 setLayout() 메소드를 사용하여 배치 관리자로 지정한다.
panel.setLayout(new BorderLayout());
-컴포넌트의 크기와 힌트를 배치 관리자에게 주고 싶은 경우
-정렬에 대한 힌트를 주고 싶은 경우
-컴포넌트들을 왼쪽에서 오른쪽으로 버튼을 배치한다.
import java.awt.*;
import javax.swing.*;
public class MyFrame extends JFrame {
public MyFrame() {
setTitle("FlowLayoutTest");
setSize(300, 150);
setLayout(new FlowLayout());
add(new JButton("Button1"));
add(new JButton("Button2"));
add(new JButton("Button3"));
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
: 컨테이너를 5개 영역(상, 하, 좌, 우, 중앙)으로 구분하고,
각각의 영역에 컴포넌트를 배치할 수 있는 배치 관리자.
-JFrame, JDialog와 같은 최상위 컨테이너의 디폴트 배치 관리자.
add(button, "South");
*영역을 지정하지 않으면 컴포넌트는 중앙에 놓임.

import java.awt.*;
import javax.swing.*;
public class MyFrame extends JFrame {
public MyFrame() {
setTitle("BoarderLayoutTest");
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(EXIT_ON_CLOSE);
: 컨테이너 공간을 격자 모양으로 나눈 후에 각 셀에 하나씩 컴포넌트들을 배치한다.
import java.awt.*;
import javax.swing.*;
public class MyFrame extends JFrame {
public MyFrame() {
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("Button4"));
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
: 한 번에 하나의 컴포넌트만 볼 수 있게 배치하는 관리자.
public class MyFrame extends JFrame {
JButton b1, b2, b3;
Container cPane;
CardLayout layoutm;
public MyFrame() {
setTitle("BoarderLayoutTest");
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.addActionListner(e->layoutm.next(cPane));
b3.addActionListner(e->layoutm.next(cPane));
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
-배치 관리자를 사용하는 것이 권장되나,
특별한 경우에는 컴포넌트들을 배치 관리자 없이 배치하기도 한다.
ex) 컴포넌트와 컴포넌트가 겹치게 하고자 하는 경우.
1) 배치관리자를 null로 설정한다.
2) add() 메소드를 사용하여 컴포넌트를 컨테이너에 추가한다.
3)
setSize(w, h)와 setLocation(x, y)을 사용하여 컴포넌트의 위치와 크기를 지정한다.
or
setBounds(x, y, w, h)를 사용하여 위치와 크기를 동시에 지정한다.
public class MyFrame extends JFrame {
private JButton b1, b2;
public MyFrame() {
setTitle("Absolute Position Test");
setSize(300, 150);
setLayout(null); // (1)
b1 = new JButton("Button #1);
add(b1); // (2)
b1.setLocation(50, 30); // (3)
b1.setSize(90, 50);
b2 = new Jbutton("Button #2);
add(b2);
b2.setBounds(180, 30, 90, 20); // (3)
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String args[]) {
MyFrame f = new MyFrame();
}
}


1. GridLayout
2. FlowLayout
3. BorderLayout
4. setLayout(null);을 사용하여 배치관리자를 제거한다.