1. LayoutManager (배치관리자)
# 컨테이너 안의 각 컴포넌트의 위치와 크기를 자동으로 결정하는 작업
1) BorderLayout
- Frame 컨테이너의 기본값 (배치관리자의 기본값)
- 동/서/남/북/중앙의 원리로 지정
- 기본값은 중앙
(1) Constructor
- BorderLayout()
-- BorderLayout(int hgap, int vgap): 컴포넌트 사이의 가로, 세로 간격을 지정
(2) Field
- static String CENTER: 중앙 배치
- static String EAST: 동쪽 배치
- static String WEST: 서쪽 배치
- static String NORTH: 북쪽 배치
- static String SOUTH: 남쪽 배치
# BorderLayout 연습하기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | package guiex; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class GuiTest05 extends Frame { Button[] btn; String[] str = { "EAST", "WEST", "SOUTH", "NORTH", "CENTER" }; public GuiTest05() { // #1. 컨테이너 super("BorderLayout"); setSize(400, 400); // #2. 컴포넌트 btn = new Button[5]; for (int i = 0; i < btn.length; i++) { btn[i] = new Button(str[i]); } // #3. 배치 관리자 setLayout(new BorderLayout(10, 10)); // #4. add() add(btn[0], BorderLayout.EAST); add(btn[1], BorderLayout.WEST); // add(BorderLayout.WEST, btn[1]); // 순서가 반대여도 무방 // add(btn[1], "west"); // west로 써도 무방 add(btn[2], BorderLayout.SOUTH); add(btn[3], BorderLayout.NORTH); add(btn[4], BorderLayout.CENTER); // add(btn[4]); // default는 CENTER setVisible(true); } public static void main(String[] args) { GuiTest05 g5 = new GuiTest05(); } } | cs |
# 실행 화면
2) FlowLayout
- 컴포넌트들을 수평으로 순서대로 나열해놓는 배치관리자
- Panel 컨테이너의 디폴트 배치관리자이다.
(1) Constructor
- FlowLayout()
- FlowLayout(int align): 정렬값을 지정하여 생성
- FlowLayout(int align, int hgap, int vgap): 정렬값과 가로, 세로 간격을 지정하여 생성
(2) Field
- static int CENTER: 중앙 정렬
- static int LEFT: 왼쪽 정렬
- static int RIGHT: 오른쪽 정렬
- static int TRAILING: 컴포넌트가 아래로 밀려날 시 오른쪽 정렬
- static int LEADING: 컴포넌트가 아래로 밀려날 시 왼쪽 정렬
# FlowLayout 연습하기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | package guiex; import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class GuiTest06 extends Frame { Button[] btn; String[] str = { "1", "2", "3", "4", "5" }; public GuiTest06() { // #1. 컨테이너 super("FlowLayout"); setSize(400, 100); // #2. 컴포넌트 btn = new Button[5]; for (int i = 0; i < btn.length; i++) { btn[i] = new Button(str[i]); add(btn[i]); } // #3. 배치 관리자 // setLayout(new FlowLayout()); FlowLayout fl = new FlowLayout(); setLayout(fl); fl.setHgap(0); // 간격 조정 setVisible(true); } public static void main(String[] args) { GuiTest06 g6 = new GuiTest06(); } } | cs |
# 실행 화면
3) GridLayout
- 격자문양의 가로, 세로를 같은 크기의 비율로 나누어 각 공간에 컴포넌트들을 배치할 수 있는 관리자이다.
- 만일 행과 열의 수보다 컴포넌트의 수가 많을 경우, 행의 개수를 우선으로 한다.
(1) Constructor
- GridLayout()
- GridLayout(int rows, int cols): 행과 열을 지정하여 생성
- GridLayout(int rows, int cols, int hgap, int vgap): 행과 열 그리고 가로, 세로 간격을 지정하여 생성
# GridLayout 연습하기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | package guiex; import java.awt.Button; import java.awt.Frame; import java.awt.GridLayout; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class GuiTest07 extends Frame { public GuiTest07() { // #1. 컨테이너 super("GridLayout"); setSize(600, 600); // #2. 컴포넌트 add(new Button("1")); add(new Button("2")); add(new Button("3")); add(new Button("4")); add(new Button("5")); add(new Button("6")); add(new Button("7")); // #3. 배치 관리자 setLayout(new GridLayout(3, 2)); // 추가되면 행은 그대로, 열은 가변적 setVisible(true); } public static void main(String[] args) { GuiTest07 g7 = new GuiTest07(); } } | cs |
# 실행 화면
# 버튼이 총 6개일 경우
# 버튼이 총 7개일 경우
'JAVA > JAVA2' 카테고리의 다른 글
JAVA2_day12 | 내부 클래스 (Inner class) (0) | 2018.01.30 |
---|---|
JAVA2_day11 | GUI 연습문제 (1) (0) | 2018.01.30 |
JAVA2_day11 | GUI (List, Choice) (0) | 2018.01.30 |
JAVA2_day11 | GUI (Checkbox, CheckboxGroup) (0) | 2018.01.30 |
JAVA2_day11 | GUI (Label) (0) | 2018.01.30 |