안녕하세요.


레이아웃에 대해 배워보기 전에 우선 프레임의 구조를 살펴보도록 하겠습니다.




이처럼 제목표시줄까지 포함한 부분을 프레임 영역, 내용이 들어가는 부분에 한정하여 컨텐츠 영역이라고 합니다.



frm.add(btn1);



지난 시간에 사용했던 위의 코드는 버튼을 프레임 영역에 붙이는 코드일까요, 컨텐츠 영역에 붙이는 코드일까요?


네, frm이 프레임 객체이기 때문에 프레임 영역에 붙이는 코드입니다. 프레임 영역에 붙여도 결과적으로는 잘 붙었습니다만 원래 컨텐츠 영역에 붙이는 것이 정석입니다. 그래서 코드를 조금 수정하겠습니다.



frm.getContentPane().add(btn1);



중간에 복잡한 영어가 끼었네요^^; 이름에도 알 수 있듯이 컨텐츠 영역을 가져오는 함수입니다. 프레임에서 컨텐츠 영역을 가져와서 거기다가 버튼을 붙이는 방식입니다. 앞으로 프레임에 구성요소를 붙일때 번거롭더라도 중간에 getContentPane()을 넣어주도록 합시다.




자, 이제 레이아웃을 배워봅시다. 레이아웃은 '배치'라는 뜻인데요, 컨텐츠 영역에 부착되는 구성요소들을 어떻게 배치할 건지 정해줄 필요가 있습니다.


이때 사용하는 함수가 바로 setLayout().



frm.setLayout() ....... 노노


frm.getContentPane().setLayout() ......... 이렇게 쓰면 되겠습니다^^



셋 레이아웃 함수의 괄호 속에는 사용하고자 하는 레이아웃의 이름을 적어주면 되는데요, 다양한 레이아웃 중에 '플로우 레이아웃'을 사용해보도록 하겠습니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// Study01.java
 
package study;
 
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
 
public class Study01 {
 
    public static void main(String[] args) {
 
        // 프레임 생성
        JFrame frm = new JFrame("슬라임 퇴치하기");
 
        // 프레임 크기 설정
        frm.setSize(350300);
 
        // 프레임을 화면 가운데에 배치
        frm.setLocationRelativeTo(null);
 
        // 프레임을 닫았을 때 메모리에서 제거되도록 설정
        frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        // ★ 레이아웃 설정
        FlowLayout fLay = new FlowLayout();
        frm.getContentPane().setLayout(fLay);
 
        // 버튼 생성
        JButton btn1 = new JButton("슬라삐");
 
        // ★ 프레임에다가 버튼 추가
        frm.getContentPane().add(btn1);
 
        // 프레임이 보이도록 설정
        frm.setVisible(true);
    }
 
}
 
cs

(추가되거나 수정된 부분에는 별표가 붙어있습니다)

26행에서 플로우 레이아웃 객체를 생성하여 27행에서 그 레이아웃으로 설정해 주었습니다.

실행해봅시다~




이제 우리가 바라던 버튼의 모습이네요 ㅎㅎ 버튼을 하나 더 만들어봅시다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// Study01.java
 
package study;
 
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
 
public class Study01 {
 
    public static void main(String[] args) {
 
        // 프레임 생성
        JFrame frm = new JFrame("슬라임 퇴치하기");
 
        // 프레임 크기 설정
        frm.setSize(350300);
 
        // 프레임을 화면 가운데에 배치
        frm.setLocationRelativeTo(null);
 
        // 프레임을 닫았을 때 메모리에서 제거되도록 설정
        frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        // 레이아웃 설정
        FlowLayout fLay = new FlowLayout();
        frm.getContentPane().setLayout(fLay);
 
        // ★ 버튼 생성
        JButton btn1 = new JButton("슬라삐");
        JButton btn2 = new JButton("슬라디");
 
        // ★ 프레임에다가 버튼 추가
        frm.getContentPane().add(btn1);
        frm.getContentPane().add(btn2);
 
        // 프레임이 보이도록 설정
        frm.setVisible(true);
    }
 
}
 
cs


어떤가요? 잘 되죠?


버튼을 두개 배치해보니까 플로우 레이아웃의 특징을 알 수가 있네요. 컨텐츠 영역의 맨 위에 가운데 정렬이 되며, 추가되는 요소는 우측에 생성되네요.




그런데말입니다. 앞으로 우리는 레이아웃을 사용하지 않을 생각입니다. 레이아웃을 사용하면 구성요소의 크기와 위치를 자동으로 정해주기 때문에 자유도가 떨어지거든요. 그럼에도 레이아웃을 배운 이유는 레이아웃을 배워야 레이아웃을 사용하지 않는다는게 무슨 뜻인지 이해하기 쉬울 것 같아서입니다 ㅎㅎ


다음 시간에는 버튼의 위치와 크기를 자유롭게 정해보도록 하겠습니다.


감사합니다.

+ Recent posts