▶ 배치 관리자(Layout Manager)
- 컨테이너 안에 추가되는 컴포넌트의 위치와 크기를 자동적으로 결정한다.
▶ FlowLayout
- 컴포넌트들을 왼쪽에서 오른쪽으로 배치한다. JPanel과 Applet(awt.애플릿)의 디폴트 배치 관리자이다.
- 너비를 벗어날 경우 다음 줄에서 다시 배치를 시작한다.
생성자 |
설명 |
FlowLayout() |
새로운 FlowLayout객체를 생성하는 디폴트 생성자이다. 기본 설정은 중앙(center)배치이며, 간격은 세로, 가로 각각 5픽셀이다. |
FlowLayout(int align) |
매개변수로 정수로 받는데, 이는 정렬 방식을 의미한다. 정렬 매개변수로 FlowLayout.LEADING, FlowLayout.CENTER, FlowLayout.TRAILING 이 있다. |
FlowLayout(int align, int hgap, int vgap) |
매개변수로 정렬 방식과 수평 간격(hgap)과 수직 간격(vgap)을 받으며, 이를 토대로 새로운 FlowLayout 객체를 생성한다. |
▶ BorderLayout
- 컴포넌트들이 상(North), 하(South), 좌(East), 우(West) 그리고 중간(Center)에 배치된다.
- JFrame과 JApplet(swing.애플릿), 대화 상자와 같은 최상위 컨테이너의 디폴트 배치 관리자이다.
- 컴포넌트의 영역을 지정하지 않을 경우 자동으로 중간 영역에 배치된다.
- 같은 위치에 컴포넌트들이 추가되면 뒤 컴포넌트에 가려서 앞의 컴포넌트가 보이지 않는다.
- 배치된 컴포넌트는 항상 컨테이너 내부를 채우게 되며, setLocation, setSize 함수로 크기나 위치조절이 되지 않는다. (확인 결과 West, East의 경우 너비 조절은 가능하나 높이 조절은 안됩니다.)
생성자 | 설명 |
BorderLayout() | 새로운 BorderLayout객체를 생성하는 디폴트 생성자이다. |
BorderLayout(int hgap, int vgap) | 매개변수로 수평 간격, 수직 간격을 받아 이들을 가지는 새로운 BorderLayout 객체를 생성한다. |
메소드 | 설명 |
void setHgap(int hgap) | 컴포넌트 사이의 수평 간격을 설정한다. (픽셀 단위) |
void setVgap(int vgap) | 컴포넌트 사이의 수직 간격을 설정한다. (픽셀 단위) |
▶ GridLayout
- 컴포넌트를 격자 모습으로 배치한다. 행과 열로 관리된다.
- 모든 컴포넌트들의 크기는 같게 되며 컨테이너의 모든 공간은 컴포넌트로 채워진다. 따라서 윈도우의 크기를 바꾸면 GridLayout은 컴포넌트의 크기를 변경하여 윈도우의 크기에 맞춘다.
생성자 | 설명 |
GridLayout(int rows, int cols) | row행과 cols열을 가지는 GridLayout객체를 생성한다. 만약 rows와 cols가 0이면 필요한 만큼의 행이나 열이 만들어진다. |
GridLayout(int rows, int cols, int hgap, int vgap) | 매개변수로 수평 및 수직 간격을 추가로 받아서 초기화한 뒤, rows행 cols열 을 가진 GridLayout객체를 생성한다. |
▶ BoxLayout
- 컴포넌트를 하나의 행이나 열에 배치하며, Box를 쌓는 모양으로 정렬된다. 컴포넌트를 정렬할 수도 있다.
생성자 | 설명 |
BoxLayout(Container container, int align) | 매개변수로 배치 관리자를 설정할 컨테이너와, 정렬 방식을 받는다. BoxLayout의 정렬 방식은 BoxLayout.X-AXIS(x축 정렬), BoxLayout.Y-AXIS(y축 정렬)로 두 가지가 있다. |
▶ CardLayout
- 여러 장의 카드처럼 컨테이너를 배치하여 각각의 컨테이너 위에 컴포넌트(JComponent)를 배치한다.
- 즉, 순서가 변경되면, 해당 순서의 컨테이너가 나타나고, 그 외의 것은 감추어진다. 카드가 번갈아가며 나타나는 형태이다.
[버튼을 클릭하면 카드가 변경된다.]
생성자 | 설명 |
CardLayout() | 새로운 CardLayout객체를 생성하는 디폴트 생성자이다. |
CardLayout(int hgap, int vgap) | hgap과 vgap은 컴포넌트 사이의 수평 간격과 수직 간격을 픽셀로 표시한 다. 기본값은 0이다. |
메소드 | 설명 |
void first(Container parent) | 첫 번째 순서의 컨테이너를 보여준다. |
void next(Container parent) | 다음 순서를 보여주며, 현재 순서가 마지막이면 처음 순서를 보여준다. |
void previous(Container parent) | 이전 순서를 보여주며, 현재 순서가 처음이면 마지막 순서를 보여준다. |
void last(Container parent) | 마지막 순서의 컨테이너를 보여준다. |
void show(Container parent, String s) | 문자열 s로 지정한 컨테이너를 보여준다. 각 컨테이너별로 이름을 지어줄 수 있다. |
▶ Example
- 컨테이너 클래스에 배치 관리자를 설정하려면 먼저 new 연산자를 이용하여 배치 관리자 객체를 만들고 컨테이너 클래스의 setLayout() 메소드를 사용하여 해당 객체를 배치 관리자로 설정한다.
JFrame frame = new JFrame(“My Frame”);
frame.setLayout(new BorderLayout());
또는
JFrame frame = new JFrame(“My Frame”);
BorderLayout bl = new BorderLayout();
frame.setLayout(bl);
- 컴포넌트의 크기에 대한 힌트를 배치 관리자에게 주는 방법으로 아래의 메소드들이 있다.
setMinimumSize(Dimension minimumsize)
setMaximumSize(Dimension maximumsize)
setPreferredSize(Dimension preferredsize) - setSize()와 유사하지만 레이아웃에 따라 setSize()로 지정할 경우 나타나지 않을 수 있으므로 레이아웃을 지정할 경우 setPreferredSize()를 사용하는 것이 좋다.
- 컴포넌트의 정렬에 대한 힌트
setAlignmentX()
setAlignmentY()
- 배치 방향을 설정하기 위한 메소드 (Orientation은 “방향, 지향”이란 뜻을 가진다.)
setComponentOrientation()
applyComponentOrientation()
▶ 절대 위치로 배치하기
...
JButton button = new JButton("Button");
setLayout(null); // 배치 관리자를 null로 설정할 경우
button.setBounds(int x, int y, int width, int height); // 컴포넌트의 위치, 크기를 꼭 설정해야함.
add(Button("Button")) // 컴포넌트를 추가한다.
...
- setBounds() 메소드 대신에, 아래의 두 메소드를 호출해도 된다. Layout을 설정하지 않았기 때문이다.
setSize(int width, int height)
setLocation(int x, int y)
'Programming Language > JAVA' 카테고리의 다른 글
18. GUI(Swing) Event and Event Listener - 이벤트의 종류와 이벤트 처리 방법(리스너) (0) | 2017.05.26 |
---|---|
17. Graphics Programming - 그래픽 프로그래밍 (0) | 2017.05.24 |
15. Graphical User Interface (GUI) - 그래픽 사용자 인터페이스 개요 (0) | 2017.05.24 |
14. Inner Class (Nested Class) and Interface - 중첩 클래스와 중첩 인터페이스 (0) | 2017.05.03 |
13. Anonymous Class - 무명 클래스와 익명 구현 객체 (0) | 2017.04.16 |