삶 가운데 남긴 기록 AACII.TISTORY.COM
[SWT/JFace] 모델 기반 어댑터 본문
모델 기반 어댑터
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
'DEV&OPS > Java' 카테고리의 다른 글
[SWT/JFace] Composite 클래스 (1) | 2024.11.27 |
---|---|
[SWT/JFace] Widget, Control, Label, Button (1) | 2024.11.27 |
[SWT/JFace] Display 클래스, Shell 클래스, 메시지 박스 예제 (81) | 2024.11.27 |
[SWT/JFace] 이클립스 플러그인 개발 환경 설정 (4) | 2024.11.27 |
Message Digest 메시지 다이제스트 (0) | 2024.11.25 |