: 모든 스윙 컴포넌트를 담는 최상위 컨테이너
: 다른 컴포넌트를 포함할 수 있는 GUI 컴포넌트 -> 도화지
: 물건 (도화지 위에 물건을 차곡차곡 올려놓는 것) , 물감
-> 전체 창
(Jframe > ContentPane(컨테이너라고 생각) > 컴포넌트)
Jframe을 큰 쟁반이라고 생각하면 여러 큰 접시들을 ContentPane이고, 그 안의 작은 접시들은 컨테이너, 그 위에 작은 음식들을 컴포넌트
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-> 프레임 종료버튼이 클릭될 때, 프레임과 함께 프로그램을 종료시키는 방법
A. FlowLayout 배치관리자
컴포넌트가 삽입되는 순서대로 왼쪽에서 오른쪽으로 배치
배치할 공간이 없으면 아래로 내려와서 반복한다.
B. BorderLayout 배치관리자
컨테이너의 공간을 동(EAST), 서(WEST), 남(SOUTH), 북(NORTH), 중앙(CENTER)의 5개 영역으로 나눔
5개 영역 중 응용프로그램에서 지정한 영역에 컴포넌트 배치
C. GridLayout 배치관리자
컨테이너를 프로그램에서 설정한 동일한 크기의 2차원 격자로 나눔
컴포넌트는 삽입 순서대로 좌에서 우로, 다시 위에서 아래로 배치
D. CardLayout
컨테이너의 공간에 카드를 쌓아 놓은 듯이 컴포넌트를 포개어 배치

FlowLayout(int align, int hGap, int vGap)

BorderLayout(int hGap, int vGap)
void add(Component comp, int index)
comp 컴포넌트를 index 위치에 삽입한다.
index : 컴포넌트의 위치
동 : BorderLayout.EAST 서 : BorderLayout.WEST
남 : BorderLayout.SOUTH 북 : BorderLayout.NORTH
중앙 : BorderLayout.CENTER

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

-> 컴포넌트를 절대 위치와 절대 크기로 설정하는 방법
container.setLayout(null);
이후 컴포넌트는 절대 위치와 크기를 개발자가 수동으로 설정해야함
setSize(int width, int height)
컴포넌트의 크기를 설정합니다.
setLocation(int x, int y)
컴포넌트의 위치를 설정합니다.
x: 왼쪽으로부터의 거리
y: 위쪽으로부터의 거리
setBounds(int x, int y, int width, int height)
위치(x, y)와 크기(width, height)를 동시에 설정합니다.
<예시 코드>
package Swing;
import javax.swing.*;
public class AbsolutePositionExample {
public static void main(String[] args) {
JFrame frame = new JFrame("배치관리자 제거 예제");
frame.setSize(600, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setLayout(null); // 배치관리자 제거
// 버튼 생성 및 절대 위치/크기 설정
JButton button1 = new JButton("Button 1");
button1.setSize(100, 40);
button1.setLocation(50, 30);
JButton button2 = new JButton("Button 2");
button2.setBounds(100, 80, 100, 40); // 위치와 크기 동시 설정
// 패널에 버튼 추가
panel.add(button1);
panel.add(button2);
// 패널을 프레임에 추가
frame.add(panel);
frame.setVisible(true);
}
}

Container ContentPane = getContentPane();
-> JFrame은 틀
ContentPane은 가장 기본적인 컨테이너
JPanel은 추가적인 컨테이너
-> JFrame은 컴포넌트를 추가할 때 자동으로 ContenPane을 사용하게 됨
<예시코드>
import javax.swing.*;
public class AbsolutePositionExample {
public static void main(String[] args) {
JFrame frame = new JFrame("배치관리자 제거 예제");
frame.setSize(300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setLayout(null); // 배치관리자 제거
// 버튼 생성 및 절대 위치/크기 설정
JButton button1 = new JButton("Button 1");
button1.setSize(100, 40);
button1.setLocation(50, 30);
JButton button2 = new JButton("Button 2");
button2.setBounds(100, 80, 100, 40); // 위치와 크기 동시 설정
// 패널에 버튼 추가
panel.add(button1);
panel.add(button2);
// 패널을 프레임에 추가
frame.add(panel);
frame.setVisible(true);
}
}
setSize(300,200)은 처음 나타날 때 JFrame의 크기를 나타냄