Purple Bobblehead Bunny

Backend/JAVA

[JAVA] 배치 관리자(Layout manager)

준영어린이 2022. 3. 2. 18:05

 

컨테이너 안의 각 컴포넌트의 위치가 크기를 설정해주는 관리자

 

1. 생성자를 사용

 JPanel panel = new JPanel(new BorderLayout());

panel.setLayout(new FlowLayout());

 

2.setLayout() 메소드 사용

panel.setLayout(new FlowLayout());

메소드명 설명
setMinimumSize() 컴포넌트의 최소 크기를 지정 button.setMinimumSize(new Dimension(300,200));
setMaximumSize() 컴포넌트의 최대 크기를 지정 button.setMaximumSize(new Dimension(300,200));
setAlignmentX() 컴포넌트의 정렬 방식을 지정 button.setAlignmentX(JComponenet.CENTER_ALIGNMENT);
settPreferredSize() 컴포넌트의 사이즈를 적절하게 지정 button.setPreferredSize();

 

 종류 설명
BorderLayout JFrame의 기본 레이아웃으로 컴포넌트들을 상,하,좌,우,중앙으로 배치한다
FlowLayout 컴포넌트들을 왼쪽에서 오른쪽으로 일렬로 배치한다. 생성자로 정렬방식을 지정 해 줄 수 있다.
GridLayout 컴포넌트들을 행과 열로 배치한다.
GridBagLayout 컴포넌트들을 행과 열로 배치한다.
BoxLayout 행이나 열 방향으로 일렬로 배치한다.
CardLayout 한 화면에 여러 컨테이너들을 겹쳐 슬라이드 처럼 사용한다.
GroupLayout 컨테이너를 순차적 배열과 병렬 배열로 나누고 두개를 결합하여 컴포넌트들을 그룹화한다.
SpringLayout 컴포넌트에 "Spring"을 연결한다. 컴포넌트들은 다른 컴포넌트를 기준으로 배치된다.

다른 Layout들에 대한 자세한 정보가 필요하면

https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html 사이트 참조

 

BorderLayout

• 컴포넌트들이 5개의 영역인 North,South,East, West,Center 중 하나로 추가 된다.

• 프레임, 애플릿, 대화상자의 드폴트 배치 관리자

• BorderLayout에서 컴포넌트를 추가할 때는 어떤 영역에 추가할 거싱ㄴ지를 지정해야함 

  지정하지 안흥면 디폴트는 Center

 

 

PAGE_START ( 또는 NORTH )

PAGE_END ( 또는 SOUTH )

LINE_START ( 또는 WEST )

LINE_END ( 또는 EAST )

CENTER

 

메소드명 설명
BorderLayout(int hgap, int vgap) 컴포넌트 사이의 수평 간격 hgap과 수직 간격 vgap을 가지는 BorderLayout 객체 생성
setHgap(int) 컴포넌트 사이의 수평 간격 설정 (단위는 픽셀)
setVgap(int) 컴포넌트 사이의 수직 간격 설정

 

FlowLayout

• 컴포넌트들을 왼쪽에서 오른쪽으로 버튼을 배치하는 배치 관리자

• 패널의 디폴트 배치 관리자

• 컨테이너의 크기가 변경되면 자동으로 각 컴포넌트를 재배치

 

메소드명 설명
FlowLayout() 새로운 FlowLayout 객체를 생성함. 기본 설정을 중앙(center) 배치
FlowLayout(int align) 지정된 정렬 방식을 가진 새로운 FlowLayout 객체를 생성한다.
기본 설정은 중앙(center) 배치이며 간격은 세로, 가로 각각 5 픽셀
정렬 매개 변수는 다음 중 하나이다.
FlowLayout.LEADING,
FlowLayout.CENTER,
FlowLayout.Trailing.
FlowLayout(int align, int hgap, int vgap) 지정된 정렬 방식과 수평 간격 hgap과 수직 간격 vgap을 가진 새로운            FlowLayout 객체를 생성한다.

컴포넌트들을 오른쪽으로 정렬했다.  setLayout(new FlowLayout(FlowLayout.RIGHT));

 

 

GridLayout

컴포넌트를 격자모습으로 배치

모든 컴포넌트의 크기는 같고, 컨테이너의 모든 공간은 컴포넌트로 채워짐

윈도우의 크기에 따라 컴포넌트의 크기를 맞춘다.

BorderLayout은 상 하 좌 우 중앙 FlowLayout은 일렬로 배치, GridLayout은 컴포넌트들을 행과 열로 나누어 배치

 

메소드명 설명
GridLayout(int rows, int cols) row 행과 cols 열을 가지는 GridLayout 객체를 생성
rows나 cols가 0이면 필요한 만큼의 행이나 열이 만들어짐
GridLayout(int rows, int cols, int hgap, int vgap) rows 행과 cols 열을 가지는 GridLayout 객체를 생성
hgap과 vgap은 컴포넌트 사이의 수평 간격과 수직 간격으로 단위는 픽셀

3 x 3 으로 크기가 자동으로 조정되었다. GridLayout은 사이즈에 따라서 컴포넌트들의 크기를 자동으로 조정해준다.

 

이번에는 행을 제한없이 하고싶다.

행 값에 0을 줬다. setLayout(new GridLayout(0,3));

갯수에 상관없이 컴포넌트들이 들어가는 것을 볼 수 있었다.

 

배치 관리자의 선택

컴포넌트를 가능한 크게 나타내고 싶은 경우

  -> GridLayout 혹은 BorderLayout을 사용

몇개의 컴포넌트를 자연스러운 크기로 한줄로 나타내고 싶은 경우

 -> FlowLayout 혹은 BoxLayout을 사용

  몇개의 컴포넌트를 행과 열로 동일한 크기로 나타내고 싶은 경우

 -> GridLayout을 사용

  몇개의 컴포넌트를 행과 열로 나타내는데 각 컴포넌트의 크기가 다르거나 간격, 정렬방식을 다르게 내고 싶은 경우

 -> BoxLayout을 사용

 

 

3열과 가변적인 행을 갖는 GridLayout을 설정하여 5개의 버튼을 배치해라.

 

pack(); 을 사용하여 각 컴포넌트의 크기를 알맞게 조정 해 줄 수도 있다.

 

절대 위치로 컴포넌트들을 배치하기

 

• 배치 관리자를 null로 설정

• add() 메소드를 사용해 컴포넌트를 추가하고, setSize()와 setLocation()을 사용하여 위치와 크기를 지정.

이건 아직 이해가 잘 가지 않는다. 나중에 다시 보기!

'Backend > JAVA' 카테고리의 다른 글

[JAVA] GUI 이벤트 구동 프로그래밍  (0) 2022.03.04
[JAVA] Generic  (0) 2022.03.04
[JAVA] Java Swing  (0) 2022.03.02
[JAVA] StringBuilder, StringBuffer  (0) 2022.03.02
[JAVA] String 클래스  (0) 2022.03.02