eclipse swt의 composite 알아보기

 

지난 강좌에서는 Java Project 에 SWT 등록하여 GUI 화면을 만드는 것을 설명 하였습니다.
이번 강좌 부터는 swt을 통해 구현할 수 있는 각 요소들에 대해서 설명하도록 하겠습니다.

 

 

1. Display, Shell

 

Display 는 현재 사용하는 OS 의 화면을 가리킵니다.
Shell 은 만드려는 창을 의미합니다.

 

Display display = new Display();
Shell shell = new Shell(display);

 

Shell 은 Display 위에 그려지는 것을 뜻합니다.

UI를 구성하는 기본 Java Project 에서는 기본적으로 사용됩니다.

 

 

2. 화면 구성

 

UI를 구성하는데 있어서 고민되는 부분이 각 요소들을 어떻게 배치하느냐의 문제입니다.

창을 띄워서 버튼을 올리고 레이블을 올리면 될거 같지만,

내가 원하는 위치에 올리려면 어떻게 올려야 할지 모르겠습니다.

 

한가지 간단한 방법이 원하는 위치에 좌표를 정해서 올려주면 됩니다.

예를 들어 버튼을 하나 올려봅니다.

 

Button button = new Button(shell, SWT.PUSH);
button.setLocation(x, y);

 

setLocation(x, y)을 사용해서 원하는 좌표에 각 요소들을 올려주시면 됩니다.

위와 같이 하면 원하는 위치에 쉽게 올릴 수 있습니다.

 

하지만, 한편으로는 나중에 수정을 대비하면 골치아픈 문제가 될 수 있습니다.

요즘같이 해상도를 자유자재로 조정하는 GUI 환경에서는 매번 좌표를 바꿔줘야하는 불편함이 있습니다.

 

화면을 늘리게 되면 버튼이 올라간 부분을 제외하곤 빈 공간이 나타납니다.

 

빈 공간을 없애면서 UI의 좌표를 수정안하면서 자연스럽게 UI를 만들면 좋은 방법을 강좌로 써볼까 합니다.

 

 

3. Composite

 

위에서 설명했던데로 자연스럽게 화면을 늘리고 배치하는데 있어서 필요한 항목이 있습니다.

바로 Composite입니다.

Composite 는 화면의 영역이라고 보시면 됩니다.

 

먼저 UI를 구성하는 코드를 만들어 보도록 하겠습니다.

 

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");
 
    shell.open();
 
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
    display.dispose();
}

 

그러면 아래와 같이 UI 가 구성됩니다.

아직은 아무 내용이 없습니다.

 

 

 

 

 

위의 화면에 버튼을 추가해보도록 하겠습니다.

 

아래와 같이 Button을 추가해줍니다.

 

Button button1 = new Button(shell, SWT.PUSH);

new Button 의 첫 번째 속성엔 shell을 입력하였습니다.
이것은 버튼이 위치할 곳을 정하는 겁니다. 현재 화면의 기본 창 구성인 shell 에 표시를 한다는 것 입니다.

두 번째 속성엔 SWT 속성이 들어갑니다.
Button 은 누르기 위한 버튼이기 때문에 SWT.PUSH 속성을 부여해주었습니다.

 

버튼을 위의 코드에 추가해 줍니다.
 

public static void main(String[] args) {

    (중략)

    shell.setText("Test");
 
    Button button1 = new Button(shell, SWT.PUSH);
    button1.setText("button1");
    Button button2 = new Button(shell, SWT.PUSH);
    button2.setText("button2");
    
    (중략)
}

 

shell 화면에 버튼 2개가 추가되었습니다.
 

 

 

 

 

이번엔 composite를 추가해서 화면을 구성해보도록 하겠습니다.

 

아래와 같이 composite 을 추가해줍니다.

 

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

 

위의 내용을 메인 코드에 추가해 줍니다.
추가를 해주면서 Button 의 첫 번째 속성에 shell 이 아닌 comp로 변경해줍니다.
 

public static void main(String[] args) {

    (중략)

    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 의 역할을 Composite 가 대신할 수 있다는 생각을 해보셨나요?!

 

shell 화면을 스스로 분할하기 위해선 어렵습니다.

그러기 때문에 Composite를 shell 으로 상속을 받고 영역을 담당하게 됩니다.

 

위의 말인 즉슨 shell 안에 Composite를 여러개 두고 원하는 크기만큼 각각 다른 영역을 만들어 나갈 수 있을겁니다.

 

 

다음 강좌에는..

 

Composite 에 대해서 설명을 했지만, 생성만 해보고선 이해가 가지 않는건 당연합니다.

Composite 의 영역을 좀더 편하게 사용하기 위해선 GridData 와  GridLayout를 사용해야합니다.

 

다음 강좌엔 Composite를 통해서 화면 영역 분할에 대해서 살펴보도록 하겠습니다.

 

 

권한

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