Recent Posts
Recent Comments
Link
12-08 00:08
Today
Total
관리 메뉴

삶 가운데 남긴 기록 AACII.TISTORY.COM

[SWT/JFace] 모델 기반 어댑터 본문

DEV&OPS/Java

[SWT/JFace] 모델 기반 어댑터

ALEPH.GEM 2024. 11. 27. 21:47

 

모델 기반 어댑터

JFace는 SWT 위젯을 좀 더 쉽게 다룰 수 있도록 헬퍼 클래스들을 지원하는데 이들을 모델 기반 어댑터라고 부릅니다.

 

어댑터의 종류

  • 뷰어 : 위젯의 모양과 정보를 구별. 가장 많이 사용.
  • 액션과 컨트리뷰션 : 이벤트 처리 절차를 간단하게 만들고 조직화
  • 이미지와 폰트 레지스트리 : 폰트와 이미지의 할당과 해제를 관리
  • 대화상자와 마법사 : 사용자와의 상호작용을 위해 SWT Dialog의 기능을 확장

 

 

HelloSWT_JFace 예제

이 예제는 순수 SWT 예제와 비슷하지만 구조가 다릅니다.

import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Text;

public class HelloJFace extends ApplicationWindow{

	//윈도우 할당
	public HelloJFace() {
		super(null);
	}

	//윈도우 보여 줌
	protected Control createContents(Composite parent) {
		Text helloText = new Text(parent, SWT.CENTER);
		helloText.setText("Hello. my friends. stay awhile and listen.");
		parent.pack();
		return parent;
	}
	
	//윈도우 작동
	public static void main(String[] args) {
		HelloJFace appwin = new HelloJFace();		
		appwin.setBlockOnOpen(true);
		appwin.open();
		Display.getCurrent().dispose();
	}

}

 

 

 

 

순수 SWT 방식과 차이 점

순수 SWT는 shell 클래스에서 GUI 외양과 동작을 같이 기술합니다.

반면 SWT/JFace는 GUI의 외양과 동작을 분리하여 기술합니다.

이런 모듈화된 구조는 코드를 재사용 할 수 있고 MVC 패턴으로 구조화 할 수 있습니다.

 

 

ApplicationWindow 클래스

ApplicationWindow는 Shell클래스에서 JFace 어댑터로서 동작합니다.

Shell 클래스가 윈도우의 크기와 스타일을 변경하는 메서드들을 갖고 있지만 ApplicationWindow의 메서드들을 사용하면 더 편리하게 설정할 수 있습니다.

SWT에서는 여러 속성과 기능들을 각각의 쉘에 대해 제공하고 설정해야 하는데 JFace에서는 자동으로 처리해줍니다.

  • addMenuBar() : 메뉴 바 설정
  • addToolBar(); 메뉴 아래 툴바 추가
  • addStatusLine(): 윈도우 하단에 상태표시줄 추가
  • setStatus(String): 상패 표시줄에 메시지를 보여줌
  • getSeparator() : 윈도우의 메뉴를 구분하는 줄을 반환.
  • setDefalutImage(Image): application에 shell이 없으면 이미지를 보여줌.
  • setExceptionHandler(IExceptionHandler): application이 특정 인터페이스에 맞춰 예외 처리를 하도록 설정

 

WidgetWindow 예제

import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;

public class WidgetWindow extends ApplicationWindow {

	public WidgetWindow() {
		super(null);
	}
	
	protected Control createContents(Composite parent) {
		getShell().setText("Widget Window");
		parent.setSize(600, 400);
		return parent;
	}

	public static void main(String[] args) {
		WidgetWindow wwin = new WidgetWindow();
		wwin.setBlockOnOpen(true);
		wwin.open();
		Display.getCurrent().dispose();
	}

}

 

실행 결과

 

 

 

 

 

 

 

728x90