eclipse swt의 Layout 속성 알아보기

 

지난 번 RowLayout을 조금 더 써먹기 위해 샘플을 더 만들어보도록 하겠습니다.

그리고 layout 에 속성을 사용하는 것을 해볼 예정입니다.

 

 

1. 화면

 

이번에는 아래와 같이 만들 예정입니다.

Composite 2개를 만들고 그 안에 버튼을 배치해보도록 하겠습니다.

 

 

어떻게 만들어야 할지 보이니까~ 조금은 알아보기 쉬울거 같습니다.

 

 

2. 부분 소스

 

기본적인 부분을 제외하고 설명을 하도록 하겠습니다. (맨 아래 전체 소스 코드가 있으니까요 ~.~)

 

먼저 shell을 생성해줍니다.

Shell shell = new Shell(display);
shell.setBounds(0, 0, 480, 320);
shell.setLayout(new FillLayout());

 

그 다음 Composite를 2개 생성합니다.

Composite comp1 = new Composite(shell, SWT.NONE);
Composite comp2 = new Composite(shell, SWT.NONE);

 

이제 Composite 에 layout을 상속 받기 위해서 RowLayot을 생성해줍니다.

// RowLayout 생성(세로로 나열)
RowLayout layout1 = new RowLayout(SWT.VERTICAL);

Composite comp1 = new Composite(shell, SWT.NONE);
comp1.setLayout(layout1);                           // 생성된 컴포지트에 레이아웃

// RowLayout 생성(가로로 나열)
RowLayout layout2 = new RowLayout(SWT.HORIZONTAL);

Composite comp2 = new Composite(shell, SWT.NONE);
comp2.setLayout(layout2);

 

그 다음 각각의 컴포지트 안에 버튼을 생성해주도록 합니다.
아래는 컴포지트 하나 안에 버튼 3개를 만드는 것입니다.

Composite comp1 = new Composite(shell, SWT.NONE);
comp1.setLayout(layout1);

Button button;

for (int i = 0; i < 3; i++) {
      button = new Button(comp1, SWT.PUSH);
      button.setText("세로버튼 " + i);    
}

 

 

3. 전체 소스

 

변수를 미리 선언해주는게 좋지만, 알아보기 쉽게 하기 위해서 필요할 때 생성하도록 했습니다.

보기엔 편하지만, 좋지 않은 소스예요 ㅋㅋㅋㅋ

 

public static void main(String[] args) {
        Display display = new Display();
 
        Shell shell = new Shell(display);
        shell.setBounds(0, 0, 480, 320);
        shell.setLayout(new FillLayout());
        shell.setText("Test");
 
        Button button;

        RowLayout layout1 = new RowLayout(SWT.VERTICAL);

        Composite comp1 = new Composite(shell, SWT.NONE);
        comp1.setLayout(layout1);

        for (int i = 0; i < 3; i++) {
            button = new Button(comp1, SWT.PUSH);
            button.setText("세로버튼 " + i);    
        }

        RowLayout layout2 = new RowLayout(SWT.HORIZONTAL);

        Composite comp2 = new Composite(shell, SWT.NONE);
        comp2.setLayout(layout2);

        for (int i = 0; i < 3; i++) {
            button = new Button(comp2, SWT.PUSH);
            button.setText("가로버튼 " + i);    
        }
 
        shell.open();
 
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
        display.dispose();
}

 

위와 같이 만들고 실행하면 아래와 같은 화면을 볼수 있습니다.

영역이 보이지 않지만, 좌우로 나뉜 컴포넌트 사이에 버튼들이 들어갔습니다.

 

 

 

4. Layout 속성

 

위의 예제를 만들어보면서 한가지 의문이 듭니다.

 

아래 그림처럼 버튼을 만들었을 때, 간격을 어떻게 줄일 수 있을까?... 하고요.

 

 

지금 같은 화면에서는 별로 문제가 되지 않지만, 복잡한 화면에 컴포지트를 만들고 그 안에 컴포지트를 넣고 또 넣고... 하는 식으로 만들다보면 컴포지트와 버튼 사이의 간격이 늘어나서 벌어질거 같습니다.

 

위에서 보이는 간격을 margin 이라고 합니다.

 

코드 상에서 자동완성 기능을 활용해서 layout 에 어떤 속성을 지정해 줄수 있는지 확인해보도록 하겠습니다.

여러 속성 중에서 margin 항목이 보입니다.

 

 

위의 코드를 아래와 같이 수정해보도록 하겠습니다.

우선 margin 중에 위쪽의 간격을 줄여보도록 Top을 가져다가 0으로 변경 하도록 하겠습니다.

 

(중략)

RowLayout layout1 = new RowLayout(SWT.VERTICAL);
layout1.marginTop = 0;

Composite comp1 = new Composite(shell, SWT.NONE);
comp1.setLayout(layout1);

(중략)

 

수정을 하고 다시 빌드를 해본 뒤에 실행한 화면입니다.

아래와 같이... 위쪽 간격이 줄어든거 같은데, 작아서 잘 안보이네요.

 

 

 

맨 처음 만든 화면과 비교를 해보도록 하겠습니다.

 

왼쪽이 처음에 만든 화면이고 오른쪽이 위쪽 간격을 줄인 화면입니다.

 

 

예제에서는 Top을 했지만, left, right, bottom 속성 모두를 변경할 수 있습니다.

 

margin 값을 줄일 수 있을 뿐만 아니라 더 넓게 바꿀 수도 있습니다.

 

 

다음 강좌에는..

 

이것 저것 만들어봤느니, 계산기를 만들어볼 생각입니다.

 

권한

 

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