컨테이너와 배치 개념

배치 관리자 대표 유형 4 가지
- java.awt 패키지에 구현되어 있음

컨테이너와 배치관리자
- 컨테이너의 디폴트 배치관리자
- 컨테이너는 생성시 디폴트 배치관리자 설정

- 컨테이너에 새로운 배치관리자 설정
- Container.setLayout(LayoutManager Im)
// JPanel 패널에 BorderLayout 배치관리자 설정
JPanel p = new JPanel();
p.setLayout(new BorderLayout());
// 컨텐트팬의 배치 관리자를 FlowLayout 으로 변경
Container c = frame.getContenPane(); // 컨텐트 팬
c.setLayout(new FlowLayout());
FlowLayout
FlowLayout - 생성자와 속성
생성자
FlowLayout()
FlowLayout(int align)
FlowLayout(int align, int hGaap, int vGap)
- align : 컴포넌트의 정렬 방법. 왼쪽 정렬(FlowLayout.LEFT), 오른쪽 정렬(FlowLayout.RIGHT), 중앙 정렬(FlowLayout.CENTER(디폴트))
- hGap : 좌우 컴포넌트 사이의 수평 간격, 픽셀 단위. 디폴트는 5
- vGap : 상하 컴포넌트 사이의 수직 간격, 픽셀 단위. 디폴트는 5

(참고로 당연하게 알듯이, return=0은 정상종료 음수(보통 리턴 -1씀)는 보편적으로 비정상)
예제 9-3 : FlowLayout 배치관리자 활용


- 참고로, 이렇게 코드를 짜게되면 창크기가 고정값이 아니고 클라이언트의 요청에 따라 창의 크기가 바뀝니다.
BorderLayout
배치방법
- 컨테이너 공간을 5 구역으로 분할,배치
-East, West, South, North, Center
- 배치 방법
- add(Component comp, int index)
- 컨테이너의 크기가 변하면 재배치

생성자
void add(Componenet comp, int index) comp 컴포넌트를 indext 위치에 삽입한다.
- comp : 컨테이너에 삽입되는 컴포넌트
- index : 컴포넌트의 위치
동 : BorderLayout.EAST
서 : BorderLayout.WEST
남 : BorderLayout.SOUTH
북 : BorderLayout.NORTH
중앙 : BorderLayout.CENTER
- BorderLayout의 사용예

예제 9-4 : BorderLayout 배치 관리자를 사용하는 예

코드에서 확인할 수 있듯이, 컨테이너에 setLayout 값 설정
- add 와 mul의 사이 공간을 vGap, 20픽셀
- Calculate 와 mul의 가로 사이의 공간을 hGap, 30픽셀
GridLayout
배치방법
- 컨테이너 공간을 동일한 사각형 격자 (그리드)로 분할하고 각 셀에 하나의 컴포넌트 배치
- 격자 구성은 생성자에 행수와 열수 지정
- 셀에 왼쪽에서 오른쪽으로, 다시 위에서 아래로 순서대로 배치

- 컨테이너의 크기가 변하면 재배치
- 크기 재조정
생성자
GridLayout()
GridLayout(int rows, int cols)
GridLayout(int rows, int cols, int hGap, int vGap)
- rows : 그리드의 행 수, 디폴트는 1
- cols : 그리드의 행 수, 디폴트는 1
- hGap : 좌우 컴포넌트 사이의 수평 간격, 픽셀단위. 디폴트는 0
- hGap : 상하 컴포넌트 사이의 수직 간격, 픽셀단위. 디폴트는 0
예제 9-5 : GridLayout으로 입력 폼 만들기

- 두 행 사이의 수직 간격 vGap이 5 픽셀로 설정됨 (컴퓨터 공학과, 공백 간격)
배치관리자 없는 컨테이너
배치관리자가 없는 컨테이너란?
- 응용프로그램에서 컴포넌트의 절대 크기와 절대 위치 결정
용도
- 컴포넌트의 크기나 위치를 개발자 임의로 결정하고자 하는 경우
- 게임 프로그램과 같이 시간이나 마우스/키보드의 입력에 따라 컴포넌트들의 위치와 크기가 수시로 변하는 경우
- 여러 컴포넌트들이 서로 겹쳐 출력하고자 하는 경우
컨테이너의 배치 관리자 제거 방법
- container.setLayout(null);
//JPanel의 배치관리자를 삭제하는 예
JPanel p = new JPane();
p.setLayout(null);
- 컴포넌트의 절대 크기와 절대 위치 설정
- 프로그램 내에서 이루어져야 함
- 다음 메소드 이용
- 컴포넌트 크기 설정 : component.setSize(int width, int height);
- 컴포넌트 위치 설정 : componet.setLocation(int x, int y);
- 컴포넌트 위치와 크기 동시 설정 : component.setBounds(int x, int y, int width, int height);
예제 9-6 : 배치관리자 없는 컨테이너에 컴포넌트를 절대 위치와 크기로 지정
