자바 스윙 배치관리자(Layout)-Border/Flow/Grid Layout

Posted by 알 수 없는 사용자
2016. 5. 30. 15:42 Java/Java 알아두면 좋은것


ㆍ 스윙 배치관리자에서 중요한 Layout에 대해 알아보도록 

    하겠습니다.

ㆍ Jframe을 상속받으면 기본값이 Borderlayout으로 

    되어있습니다.

ㆍ 우선 BorderLayout부터 알아보도록 하겠습니다.


 


1.BorderLayout

위 사진처럼 BorderLayout은 경계면을 기준으로 레이아웃을 잡는 것입니다.

코드는 아래와 같습니다.

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
package 스윙;
 
import java.awt.BorderLayout;
 
import javax.swing.JButton;
import javax.swing.JFrame;
 
class BorderLay extends JFrame{
    
 
    public BorderLay() {
        super("Border Layout Test");
        this.init();//화면을 구성하는 메소드
        
        this.setSize(500,200);
        //화면의 가로 세로 크기
        setVisible(true);
        //화면에 표시하는 기능 이걸 안쓰면 표시안됨
    }
    public void init(){
        this.add(new JButton("Center"));
        this.add(new JButton("West"),BorderLayout.LINE_START);
        this.add(new JButton("East"),BorderLayout.LINE_END);
        this.add(new JButton("North"),BorderLayout.PAGE_START);
        this.add(new JButton("South"),BorderLayout.PAGE_END);
    }
}
public class BorderLayoutTest {
    public static void main(String[] args) {
        new BorderLay();
    }
}
 
 
cs

위 코드에서 init()함수 부분에서 BorderLayout.PAGE설정을 왜 해주는지는 

아래 코드와 같이 입력 후 코딩을하면 아래 그림과 같이 나온다.

1
2
3
4
5
6
7
8
9
 public void init(){
 
        this.add(new JButton("Center"));
        this.add(new JButton("West"));
        this.add(new JButton("East"));
        this.add(new JButton("North"));
        this.add(new JButton("South"));
    }
 
cs

기본적으로 아무 설정없이 하면 가운대 설정된 하나의 

버튼이 전체를 잡아먹기 때문에 당황 할 수도 있다.

사용시 주의 해야하지만 별로 사용할 일은 없을 것으로 판단된다...

 

2.FlowLayout

이름 그래도 흐름대로 가는 Layout이라고 

생각하면 될 것 같습니다.

버튼을 배치하면 --->이쪽방향으로 컨테이너 크기에 

따라 줄이 바뀌면서 배치되는 Layout이다.


위 그림에서 보듯이 화면 크기에 따라 흐름에 맞게 배치되는 

Layout이라고 생각하시면 될 것 같습니다. 

코드는 아래와 같습니다.

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
package 스윙;
 
import java.awt.FlowLayout;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
 
class Flowlayout extends JFrame{
    public Flowlayout() {
        setTitle("FlowLayout Test");
        setSize(300100);
        setLayout(new FlowLayout());
        
        
        add(new JButton("버튼1"));
        add(new JButton("버튼2"));
        add(new JButton("버튼3"));
        add(new JButton("버튼4"));
        add(new JButton("버튼5"));
//        add(panel);//팬널을 프레임에 추가 이걸 꼭 써줘야 프레임에 추가되어 화면에 나온다.
        
//        pack();
        setVisible(true);//화면표시 여부이므로 꼭 해줘야 확인할수있다.
    }
}
public class FlowLayoutTest {
    public static void main(String[] args) {
        new Flowlayout();
    }
}
 
cs

 

3.GridLayout

이것은 행과 열을 미리 정의해서 정의한 구역만큼 영역을 가지는 Layout이라고 생각하시면 됩니다.

아래 코드를 보시면 0,3으로 행과 열을 정해놓았는대요

0을 사용하면 가변적으로 변한다고 생각하고 1이상인 수를 입력하면 고정크기라고 생각하시면 됩니다.

setLayout(new GridLayout(03)); 을 사용하고 아래 코드처럼 버튼을 5개 추가하면 다음과 같이 나온다.

 코드는 아래와 같다.

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
package 스윙;
 
import java.awt.GridLayout;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
 
class GridLay extends JFrame{
 
    
    public GridLay() {
        setTitle("GridLayout Test");
        this.init();//화면을 구성하는 메소드
        this.start();//이벤트,동작처리하는 메소드
        this.setSize(500,200);
        //화면의 가로 세로 크기
        setVisible(true);
    }
    public void init(){
        setLayout(new GridLayout(03));
        add(new JButton("버튼1"));
        add(new JButton("버튼2"));
        add(new JButton("버튼3"));
        add(new JButton("버튼4"));
        add(new JButton("버튼5"));
 
        
        
    }
    public void start(){
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
public class GridLaouyTest {
    public static void main(String[] args) {
        new GridLay();
    }
}
 

cs

 

남은 Layout인 BoxLayout과 CardLayout에 대해서는 다음 글에 적도록 하겠습니다.