ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Dialog 생성 시 기본으로 생기는 Ok, Cancel 버튼 사용 및 Custom
    JAVA/SWT 2021. 5. 14. 08:06
    728x90
    728x90

    SWT 에서 Dialog 를 생성할 때 기본으로 제공되는 Button 이 있다

     

    Default createButtonBar

     

    Eclipse 에서 Alt + Shift + S -> v  를 누르고 createButtonBar(Composite) 함수를 클릭한다

     

     

    @Override
    protected Control createButtonBar(Composite parent) {
    	// TODO Auto-generated method stub
    	return super.createButtonBar(parent);
    }

     

     

     

    생성된 기본 버튼 모양이다

     

     

     

    OK 를 눌렀을 때의 로직을 코딩하고 싶다면 

    okProcessed() 함수를 오버라이드하면 된다

     

     

     

     

     

     

    createButtonBar 커스터마이징

     

    만약 위의 사진과 같이 OK, Cancel 이외에 Apply 버튼을 추가하고 싶으면 어떻게 해야 할까?

    그럴때는 createButtonBar() 함수를 수정해야한다

     

     

     

    우선 Button 이 들어갈 Composite 를 생성하자

    Composite 를 생성할 때는 parameter 인 parent 를 인자로 사용하면된다

    Button 이 3개가 들어감으로 Column 수가 3인 GridLayout 를 적용한다

    @Override
    protected Control createButtonBar(Composite parent) {
        Composite compBtn = new Composite(parent, SWT.NONE);
        compBtn.setLayout(new GridLayout(3, true));
        compBtn.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false, 1, 1));
    

    new GridData 의 인자는 

    (가로로 꽉차게, SWT.NONE, 창 길이 변경 시 버튼 가로길이 확장, false, 1, 1) 로 적용한다

     

     

     

        Button okBtn = new Button(compBtn, SWT.NONE);
        okBtn.setText("OK");
    	
        Button okBtn = new Button(compBtn, SWT.NONE);
        okBtn.setText("Apply");
    	
        Button cancelBtn = new Button(compBtn, SWT.NONE);
        cancelBtn.setText("Cancel");

     Button 을 생성한다

     

     

     

    Button 을 가로로 꽉 차게 해야하기 때문에

    GridData 를 적용한다

        GridData gd_btn = new GridData(SWT.FILL, SWT.NONE, true, false);
        okBtn.setLayoutData(gd_btn);
        applyBtn.setLayoutData(gd_btn);
        cancelBtn.setLayoutData(gd_btn);

     

     

     

    마지막으로 원래 createButtonBar 에서는 return 값으로 super.createButtonBar(parent) 를 사용하였지만

    커스터마이징한 버튼을 적용할거기 때문에 return null 을 적어준다

    	return null;
    }

     

     

     

     

    전체 코드는 아래와 같다

    @Override
    protected Control createButtonBar(Composite parent) {
    	Composite compBtn = new Composite(parent, SWT.NONE);
    	compBtn.setLayout(new GridLayout(2, true));
    	compBtn.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false, 1, 1));
    	
    	okBtn = new Button(compBtn, SWT.NONE);
    	okBtn.setText("OK");
    	
    	okBtn = new Button(compBtn, SWT.NONE);
    	okBtn.setText("Apply");
    	
    	cancelBtn = new Button(compBtn, SWT.NONE);
    	cancelBtn.setText("Cancel");
    	
    	GridData gd_btn = new GridData(SWT.FILL, SWT.NONE, true, false);
    	okBtn.setLayoutData(gd_btn);
    	cancelBtn.setLayoutData(gd_btn);
    	return null;
    }

     

     

     

     

     

    728x90
    728x90
Designed by Tistory.