eclipse swt의 composite + GridLayout 알아보기

 

지난 강좌에 이어서 Composite 에 대해서 설명하도록 하겠습니다.

 

 

1. 지난 소스

 

먼저 지난주에 작성한 소스 내용입니다.

 

public static void main(String[] args) {

    Display display = new Display();

    Shell shell = new Shell(display);
    shell.setBounds(0, 0, 400, 300);
    shell.setLayout(new FillLayout());
    shell.setText("Test");

    Composite comp = new Composite(shell, SWT.NONE);
    comp.setLayout(new FillLayout());

    Button button1 = new Button(comp, SWT.PUSH);
    button1.setText("button1");
    Button button2 = new Button(comp, SWT.PUSH);
    button2.setText("button2");
     
    shell.open();
 
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
    display.dispose();
}

 

지난 주에 Composite 가 shell 위에서 shell 와 같은 영역을 가질 수 있는 것을 보여 주었습니다.

이제 shell에서 직접 수정하지 않고 Composite 의 영역을 나누는 방법을 설명하도록 하겠습니다.

 

 

2. GridLayout

위의 소스 내용 중 Composite 부분을 살펴봅니다.

 

Composite comp = new Composite(shell, SWT.NONE);
comp.setLayout(new FillLayout());

 

comp.setLayout(new FillLayout()); 라는 내용을 살펴 봅니다.

 

composite 의 레이아웃을 잡는데 FillLayout을 사용합니다.

Fill 은 말 그대로 가득 채운다는 뜻입니다.

 

그래서 위의 소스대로 버튼을 만들었을 때, 아래 그림과 같이 쉘 영역에 가득차게 나타납니다.

 

 

버튼의 크기를 지정하지 않았는데도 Composite에서 지정한 대로 안에 존재하는 객체들이 전부 가득 채워졌습니다.

알아서 채워준다고 하니 편리한거 같지만, 내 입맛에 맞는대로 만들려면 Fill 보다는 다른 것을 사용하는게 좋을거 같습니다.

 

그래서 자주 사용되는 것이 GridLayout 입니다.

GridLayout은 객체의 setLayout 속성 안에 들어가게 됩니다.

Grid 는 눈에 보이지 않는 격자, 구분선 정도로 생각하면 됩니다.

설명을 보면 아래와 같이 되어 있습니다.

 

org.eclipse.swt.layout.GridLayout.GridLayout(int numColumns, boolean makeColumnsEqualWidth)

Constructs a new instance of this class given the number of columns, and whether or not the columns should be forced to have the same width. If numColumns has a value less than 1, the layout will not set the size and position of any controls.

Parameters:

numColumns
the number of columns in the grid
makeColumnsEqualWidth
whether or not the columns will have equal width

 

@.@ 영어 울렁증이 있으시다면, 재빨리 아래를 봅니다.

 

new GridLayout(numColumns, makeColumnsEqualWidth);

numColumns                  : (int) 컬럼의 수를 지정합니다.
makeColumnsEqualWidth
    : (boolean) 컬럼의 폭을 동일하게 할 건지 결정하는 겁니다.

 

예를 들어서 소스 내용을 아래와 같이 바꾼다면, 1행으로 나뉘고 컬럼의 폭은 동일하지 않게 합니다.

makeColumnsEqualWidth 속성을 false 하더라도 컬럼 폭은 크게 영향을 미치지 못합니다.
실제 크기는 size 나 앞으로 배울 GridData를 통해서 조절하게 됩니다.

 

comp.setLayout(new GridLayout(1, false));

 

위의 소스에서 컬럼의 수를 1개를 주었을 때, 같은 행에서 1개밖에 배치가 안되므로 다음 객체는 자동적으로 아래에 배치됩니다.
 

 

컬럼의 수를 2개로 변경해보도록 하겠습니다.

 

comp.setLayout(new GridLayout(2, false));

 

컬럼의 수를 2개를 주었을 때, 같은 행에서 2개 배치되므로 버튼2는 버튼1 옆에 생성이 되었습니다..
 

 

 

 

만약에 버튼을 6개 만들었고, 컬럼 수를 3개로 나눈다면 어떻게 보일까요?!

버튼 3개가 차례대로 한줄에 표시되고,  더 이상 같은 행에 생성될 수 없으니 다음 칸으로 넘어가서 생성될 것입니다.

 

 

 

다음 강좌에는..

 

Composite를 영역을 분할하는 GridLayout 에 대해서 설명을 하였습니다.

작업을 하다보면 원하는 위치에 좌표 값으로 입력해서 크기를 정해서 올려놓는 방식이 더 편할 수도 있지만,

요즘과 같이 유연한 환경(다양한 해상도)를 소화하긴 힘듭니다.
강좌를 통해서 모든 것을 이해하긴 힘들겠지만, 개념 부분을 이해하고 학습 한다면
Grid를 통해서 배치를 생각하는 디자인이 조금은 더 유연한 프로그램이 되지 않을까 합니다. ^^*

 

다음 강좌엔 GridData를 통해서 객체의 크기를 조절해보도록 하겠습니다.

 

 

권한

강좌에 대한 내용은 에프에이리눅스(주) 에 권한이 있습니다.
본문의 이미지 및 내용은 순수 제작한 것이며, 내용 중 외부 이미지를 사용할 경우, 출처를 표기합니다.
무분별한 불펌 보다는 포럼을 홍보해주셔서 더욱 더 활성화되어 좋은 내용의 글이 올라오도록 부탁드립니다.