• 컨테이너 안의 각 컴포넌트의 위치가 크기를 설정해주는 관리자
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 |