java/GUI

배치 관리자

appmaster 2019. 5. 11. 15:12

버튼과 같은 자식 컴포넌트들은 컨테이너 내부에 배치된다. 프로그래머가 절대 좌표값으로 자식 컴포넌트의 위치를 지정할 수도 있다. 그러나 절대 위치를 사용하여 컴포넌트들을 배치할 경우, 플랫폼에 따라서 프로그램의 모습이 상당히 달라질 수 있다.

이러한 문제점을 해결하기 위하여 자바에서는 배치 관리자(layout manager)을 사용한다. 배치 관리자는 컨테이너 안에 존재하는 컴포넌트들의 크기와 위치를 자동적으로 관리하는 객체이다. java.awt 패키지에는 여러 가지의 배치를 제공하는 배치 관리자가 제공된다.

 

 

BorderLayout

컴포넌트들이 5개의 영역인 North, South, East, West, Center 중 하나로 추가된다. 프레임, 애플릿, 대화 상자와 같은 최상위 컨테이너의 디폴트 배치 관리자이다. BorderLayout은 아래 그림처럼 컨테이너를 5개의 영역으로 구분하고 각각의 영역에 컴포넌트를 배치할 수 있다.

만약 영역을 지정하지 않으면 컴포넌트는 Center에 놓여진다. 여러개의 컴포넌트를 같은 영역에 추가하는 경우, 마지막으로 추가된 컴포넌트만 표시된다.

 

컨테이너에 배치 관리자를 설정하려면 먼저 new 연산자를 이용하여 배치 관리자 객체를 만들고 이 객체를 컨테이너의 setLayout() 메소드를 사용하여 배치 관리자로 지정한다.

setLayout(new BorderLayout()); // 프레임의 배치 관리자를 설정한다.

 

만약 남쪽에 배치하고 싶으면 이렇게한다.

add(button, "South")

 

 

FlowLayout

컴포넌트들을 왼쪽에서 오른쪽으로 버튼을 배치한다. 패널의 디폴트 배치 관리자이다. FlowLayout은 가장 간단한 배치 관리자로서 각 컴포넌트들은 하나의 줄에서 차례로 배치되고 더이상 공간이 없으면 다음 줄에 배치된다.

setLayout(new FlowLayout());

 

 

GridLayout

컴포넌트를 격자 모습으로 배치한다. 모든 컴포넌트들의 크기는 같게 되며 컨테이너의 모든 공간은 컴포넌트로 채워진다. 윈도우의 크기를 바꾸면 GridLayout은 컴포넌트의 크기를 변경하여 윈도우의 크기에 맞춘다.

setLayout(new GridLayout(0,3)); //(행, 열)

 

 

절대위치로 배치하기

배치 관리자는 플랫폼이나 룩앤필의 변경에 따른 컴포넌트의 외관 변경이나 폰트의 크기 변경, 컨테이너의 크기 변경에 쉽게 적응한다. 그러나 특별한 경우에는 컴포넌트들을 배치 관리자 없이 배치해야만 하는 경우도 있다. 즉 컨테이너 안의 컴포넌트들을 배치 관리자 없이 배치해야만 하는 경우도 있다. 즉 컨테이너 안의 컴포넌트들의 크기와 위치가 외부의 영향을 받지 않는 경우가 그렇다. 

그렇다고 해서 절대위치만 사용하는 것은 비추이다. 예를들어 컴퓨터, 핸드폰, 각각 해상도도 다르고 화면크기도 다르기 때문에 좋지않다. 어떤 기계에는 버튼이 보일수 있지만 어떤 기계에는 안보일수 있기 때문이다.

setLayout(null); // 패널의 배치 관리자를 지정하지 않는다. 즉 절대위치를 사용하겠다는 의미이다.

b1 = new JButton("Button 1");
add(b1) // add() 메소드를 사용하여 컴포넌트를 컨테이너에 추가한다.

b1.setLocation(10, 30); // 각 버튼의 크기와 위치를 setLocation()
b1.setSize(90, 20); // setSize()메소드를 이용하여 지정한다.

 

'java > GUI' 카테고리의 다른 글

자바 기초 컴포넌트들  (0) 2019.05.11
패널 사용하기  (0) 2019.05.11
자바 JFrame 클래스  (0) 2019.05.11
자바 GUI 작성 절차  (0) 2019.05.09
자바 컴포넌트와 컨테이너  (0) 2019.05.09