배치 관리자(Layout Manager)

 

컨테이너 안에 추가되는 컴포넌트의 위치와 크기를 자동적으로 결정한다.




 FlowLayout


컴포넌트들을 왼쪽에서 오른쪽으로 배치한다. JPanelApplet(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)에 배치된다.


- JFrameJApplet(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)






+ Recent posts