Eclipse

상단에 탭이 있는 Dialog 만들기

_침묵_ 2007. 3. 31. 23:51

위자드와 등록정보창외에 기본적으로 제공해주는 Dialog등은 이클립스 프로젝트에서 상당히 많이 쓰입니다.

Dialog 상단에 탭이 있는 경우, 매번 다이얼로그마다 탭설정해주는 작업을 해주지않고 편하게 마치 위자드에서 스텝이 자동으로 생기는 것처럼 해주도록 해보겠습니다.

 

간단한거지만, 설명이 쉽지 않아 그림을 보도록 하겠습니다.

 

사용자 삽입 이미지

 


그림을 보면 상단에 탭이 2개가 있습니다. 2개의 탭은 경우에 따라 3개 혹은 4개가 될 수 있습니다.

사용자 삽입 이미지

 

시퀀스 다이어그램을 보면 트리에서 등록정보를 보면 TabDialog를 생성을 하고, PageFactory에서 페이지 목록을 얻은후 실제 UI가 있는 NamePage를 생성을 하도록 합니다.

확인을 누르면 NamePage의 저장 메소드를 실행합니다.

 

TabDialog는 Dialog를 상속받아 상단에 탭을 구성을 합니다.

소스를 보면 다음과 같습니다.

public class TabDialog extends Dialog {

    private PageFactory factory = null;

    protected int width = 400;

    protected int height = 300;

   

    private TabFolder tabFolder;

                    

    protected Control createDialogArea(Composite parent)

    {

        Composite composite = super.createDialogArea(parent);

        tabFolder = new TabFolder(composite, SWT.TOP);

        tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH));

        for (Iterator iterator = factory.getPageList().iterator();

                        iterator.hasNext();)

        {

            ISavedPage page = (ISavedPage) iterator.next();

            TabItem tabItem = new TabItem(tabFolder, SWT.NONE);

            page.createControl(tabFolder);

            tabItem.setControl(page.getControl());

            tabItem.setText(page.getName());

        }

        return composite;

    }

}

 


소스를 설명하면 Dialog의 화면을 그리는 시점에 우선 TabFolder를 생성을 하고, pageFactory에서 페이지 목록을 얻어 탭을 생성을 합니다.

PageFactory에 오는 실제 화면 구성하는 Page의 경우 Page 설명을 안하기 위해 위자드에서 사용하는 WizardPage를 사용을 했습니다.

 

사용자 삽입 이미지


실제 만들어진 결과입니다. 페이지가 하나뿐이지만, Factory에 추가를 하기만 하면 됩니다.
이상으로 Wizard와 같은 컨셉으로 TabDialog를 완성했습니다.
설명하려는 사항을 요약을 하면, 화면마다 매번 Dialog를 만드는 방법은 좋지 않습니다. 페이지는 어느 Dialog에서든지 쓸수 있게 해야하고, Dialog는 어느 Page라도 붙일 수 있는 구조가 되어야만 합니다.