컨테이너(Container)와 배치(Layout)
컨테이너와 배치 개념
컨테이너에 부착되는 컴포넌들의 위치와 크기는 컨테이너 내부에 있는 배치관리자(Layour Manager)에 의해 결정됩니다.
배치와 관련하여 AWT나 스윙의 컨테이너는 다음과 같은 특징을 가집니다.
- 컨테이너마다 배치 관리자가 하나씩 있다(하지만, 배치관리자를 삭제할 수도 있다).
- 배치관리자는 컨테이너에 컴포넌트가 부착되는 시점에 컴포넌트의 위치와 크기를 결정합니다.
- 컨테이너의 크기가 변경되면 배치관리자는 컨테이너 내부의 모든 컴포넌트들의 위치와 크기를 재조정합니다.
배치관리자의 종류
자바는 여러 종류의 배치관리자를 지원합니다. 배치관리자는 java.awt 패키지에 존재하는 클래스이며, 이들을 사용하기 위해서는 다음 import 문이 필요합니다.
import java.awt.*;
RowLayout
컨테이너에 부착되는 순서대로 왼쪽에서 오른쪽으로 컴포넌트를 배치하며, 오른쪽에 더 이상 배치할 공간이 없으면 아래로 내려와서 다시 왼쪽에서 오른쪽으로 배치합니다. 컴포넌트의 크기는 화면에 출력될 수 있는 적당한 크기로 설정합니다.
BorderLayout
컨테이너의 공간을 동(EAST), 서(WEST), 남(SOUTH), 북(NORTH), 중앙(CENTER)의 5개의 영역으로 나누고 응용 프로그램에서 지정한 영역에 컴포넌트를 배치합니다. 응용프로그램에서는 5개의 영역 중 하나를 반드시 지정하여야 합니다. 영역을 지정하지 않으면 중앙에 배치됩니다. 컴포넌트의 크기는 영역의 크기에 맞추어 설정됩니다.
GridLayout
컨테이너의 공간을 응용프로그램에서 설정한 동일한 크기의 2차원 격자로 나누고, 컴포넌가 삽입되는 순서대로 좌에서 우로, 다시 위에서 아래로 배치합니다. 컴포넌트의 크기는 셀의 크기와 동일하게 설정합니다.
CardLayout
컨테이너의 공간에 카드를 쌓아 놓은 뒤 컴포넌트를 포개어 배치합니다. 컴포넌트의 크기는 컨테이너의 크기와 동일하게 설정합니다.
컨테이너의 디폴트 배치관리자
컨테이너의 디폴트 배치 관리자
| AWT와 스윙 컨테이너 | 디폴트 배치관리자 |
| Window.JWindow | BorderLayout |
| Frame.JFrame | BorderLayout |
| Dialog.JDialog | BorderLayout |
| Panel.JPanel | FlowLayout |
| Applet.JApplet | FlowLayout |
컨테이너에 새로운 배치관리자 설정, setLayout() 메소드
컨테이너에는 새로운 배치관리자를 마음대로 설정할 수 있습니다. 이를 위해 다음과 같이 Container 클래스의 setLayout() 메소드를 호출합니다.
Container.setLayout(LayoutManager lm); // lm을 새로운 배치관리자로 설정한다.
예를 들어, JPanel에 BorderLayout 배치관리자를 설정하려면 다음과 같습니다.
JPanel p = new JPanel();
p.setLayout(new BorderLayout()); // 패널에 BorderLayout 배치관리자 설정
또한 컨텐트팬의 배치 관리자를 FlowLayout으러 변경하려면 다음과 같이 합니다.
Container conentPane = frame.getContentPage(); // 프레임의 컨텐트팬
contentPane.setLayout(new FlowLayout()); // FlowLayout 배치관리자 설정
다음과 같이 배치 관리자 객체를 생성하는 new를 빠트리지 않도록 주의하도록 합니다.
contentPane.setLayout(FlowLayout); // 오류
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
| BorderLayout 배치 관리자 (1) | 2025.05.24 |
|---|---|
| FlowLayout 배치관리자 (1) | 2025.05.21 |
| 스윙 GUI 프로그램 만들기 (1) | 2025.05.17 |
| 자바 GUI 패키지 (1) | 2025.05.14 |
| 자바의 GUI (0) | 2025.05.11 |