RCP/SWT & JFACE

    JFACE new Window의 다이얼로그 생성

    독립창으로 다이얼로그 생성새로운 독립창에 dialog를 생성하고 싶은 경우에는 다음과 같이 설정한다. 예를들어 a 라는 다이얼로그를 생성할 때, parent Shell을 null 값을 전달하며 새로운 창에 다이얼로그가 생성된다. Dialog a = new Dialog(null);a.open(); 생성된 다이얼로그는 독립된 task bar에 아이콘을 가지게 된다. 다른 창보다 강제로 상위에 표시a.forceActive();a.forceFocus(); blocking 해제 방법a.setBlockOnOpen(false);

    shell Listener

    shell에 리스너를 추가하여 shell이 최소화 되었을 때, 다시 최대화 되었을 때, 활성화 됬을 때 종료됬을 때 등 shell 자체의 이벤트에 대한 리스너를 설정할 수 있다. shell.addShellListener(new ShellListener() { public void shellActivated(ShellEvent event) { System.out.println("activate"); } public void shellClosed(ShellEvent arg0) { System.out.println("close"); } public void shellDeactivated(ShellEvent arg0) { } public void shellDeiconified(ShellEvent arg0) { ..

    스플래시 이미지를 png 파일로 할 수 없는이유

    Look here http://wiki.eclipse.org/Equinox_Launcherfor some details on the -showsplash argument which controls the initialdisplaying of the splash screen in the launcher. There are really three phases to the splash screen when eclipse starts:1) Native code, before java starts2) Java calling out to Native code from Main, before OSGi starts3) Java code working through SWT, after workbench starts Fo..

    대용량 테이블 조회가 가능한 Nattable 예제 실행 방법

    TableViewer로는 대용량 데이터를 가져오는데 한계가 있다. 그래서 이클립스에서 제공하는 nattable을 사용하면 조금 더 빠르게 대용량 데이터를 가져올 수 있다. 그 nattable의 예제와 소스코드를 볼 수 있는 방법을 소개한다. 첨부된 파일 두개를 모두 다운 받고 cmd 창에서 다음 명령어를 실행시킨다. java -cp org.eclipse.swt.win32.win32.x86_64-4.3.jar;NatTableExamples-0.9.0.jar org.eclipse.nebula.widgets.nattable.examples.NatTableExamples 관련 주소https://eclipse.org/nattable/documentation.php?page=getting_started

    OSGI & Platform

    OSGI?다양한 이클립스의 런타임 매커니즘을 하나로 묶어서 사용할 수 있도록 만든 런타임 모델이 OSGI 런타임 모델이다. Platform현재 실행중인 이클립스 환경에 대한 정보를 제공한다. 이 클래스를 사용해 설치되어 있는 플러그인(번들),. 확장, 확장점, 명령행 인자 , 작업관리자 등의 정보를 얻을 수 있다.Ex ) getProduct() 현재 실행 중인 이클립스 제품 정보를 반환한다.

    RCP 프레임워크 프로젝트의 플러그인 클래스

    플러그인 클래스모든 플러그인은 프로그램 관저에서 플러그인을 대표하는 클래스를 내역서 편집기의 개요 페이지에서 선언할 수 있다. (Menifest의 OverView 페이지 이기도 하며, 3.2 이상부터는 Activator라고 부른다.)플러그인과 연관된 정적 리소스에 접근하거나, 플러그인별 환경설정 또는 기타 상태 정보에 접근해 초기화 하기 위한 메소드를 제공한다.반드시 필요한 것은 아니지만 플러그인 내역서에 플러그인 클래스가 지정되어 있는 경우에 플러그인이 로딩 되었음을 전달 받는 첫 번째 클래스이며, 또한 종료되었을 때 전달 받는 마지막 클래스 이다. (그를 이용해서 해당 플러그인의 시작과 끝의 새로운 동작을 추가할 수 있다.) UI를 사용하는 플러그인의 경우 AbstractUIPlugin을 상속받아서 ..

    Menifest 파일 설명

    Menifest Dependencies 페이지1. Menifest는 플러그인들의 의존관계를 표시Require-Bundle: org.eclipse.ui,Org.eclipse.core.runtime 이 뜻은 해당 두개의 플러그인에 현재 플러그인이 종속된다는 것을 의미한다.해당 의미는 컴파일시 결정되는 종속성이 아닌 플러그인의 실행시에 사용되는 종속성이다.실행 중 참조해야 할 플러그인이 어떤 것인지 확인한다. 클래스 로드 중 Require-Bundle에 명시된 항목 중 클래스를 찾을 수 없을 경우 NoClassDefFoundError 예외가 발생한다. Require-Bundle: org.eclipse.ui,Org.eclipse.core.runtime;resolutoin=optional // 없어도 실행되는것(..

    Action 클래스 살펴보기

    필요한 액션을 구현하기 위해서 action클래스를 상속받아서 구현한다. Action 클래스의 메소드 Run() - action에 해당하는 이벤트 처리 수행Action() - 디폴트 생성자Action(String, ImageDescriptor) - text 필드를 생성하고 이미지를 action에 연결하는 생성자Action(String, int) - TEXT와 STYLE 필드를 설정하는 생성자. ImageDescriptor 객체는 이미지가 아니고 이미지를 생성하기 위해 필요한 정보를 가진 객체이다. getStyle() - STYLE 필드를 반환한다.setEnabled(boolean) - ENABLED 필드를 설정한다.getEnabled() - ENABLED 필드를 반환한다.setChecked(boolean)..

    rcp프레임워크의 shell객체의 이벤트 처리 설명

    Shell 객체는 이벤트를 위젯에 보내고 위젯은 이정보를 리스너로 불리는 인터페이스로 전달하고 리소드 메소드 중에 동작을 처리하는 이벤트 핸들러를 호출한다. 어댑터어댑터는 추상클래스로서 Listener 인터페이스를 구현하고 필요한 각 메소드의 기본적인 구현을 제공한다.필요한 메소드만 작성하면 된다.(리스너로 코딩하면 필요하지 않은 부분도 코딩해야 한다.)즉, 위젯을 리스너가 아닌 어댑터와 연결한다면 조금더 편리하다. 케이스 1.리스너로 코딩하기Button.addMouseListener(new MouseListener(){Public void mouseDown(MosueEvent e){Clkdevent();} 어댑터로 코딩하기Button.addMouseListener(new MouseAdapter(){Pu..

    event doit 설명

    Public void close(Event event) {Event.doit = false; // event가 일어나지 않게 지정 If(true)Event.doit = true;// 어떤 조건에서만 true로 변경 }

    JFace TreeViewer설명

    ViewerViewer는 MVC 패턴을 가지고 있다.Viewer의 하위 클래스인 ContentVier와 StructuredViewer가 있다. ContentViewer는 다양한 인터페이스를 활용해서 도메인 객체 형태를 유지하면서 데이터를 다룬다. 이들 인터페이스는 이름 앞에 I를 붙인다. 이러한 인터페이스는 확장점을 표시하며 이를 사용하여 애플리케이션의 맞춘 로직을 프레임워크에 넣을 수 있다. StructuredViewer는 ContentViewer에게 제공하는 데이터를 구조화 한다. 구조화는 필터링, 정렬 기능 같은 일반적인 작업을 실행하는 메도드들이 이 계층에서 구현된다. 각 위젯인 Tree, List, Table 등은 이에 맞는 Viewer의 하위 클래스로 ListViewer나 tableViewer..

    IWizardPage 인터페이스

    Jface는 IWizardPage 인터페이스를 사용하여 마법사의 페이지 하나를 표현한다. getName() : 위자드의 유일한 이름을 가진다.getNextPage(), getPreviousPage() 이 메소드들은 다음이나 이전의 페이지로 이동한다.isPageComplete() 사용자가 해당 페이지에서 필요한 모든 내용을 채웠는지 알아낸다.canFlipToNextPage() : 다음 버튼을 사용할 수 있는지 체크 한다. 마법사를 담는 부분은 Iwizard 인터페이스이고 각 페이지는 wizardpage가 나타낸다. 마법사 컨테이너 마법사 컨테이너는 하나 이상의 마법사에 대한 호스트로서의 역할을 수행한다. Dialog SettingDialogSetting은 IDialogSettings 인터페이스를 구현한다...

    Draw2d 설명

    Draw2d 툴은 사용자가 좋아하는 모든 외형과 기능을 포함함 GUI 컴포넌트를 만들 수 있게 한다. Draw2d의 기본 클래스클래스기능유사 SWT 클래스LightweightSystem이미지를 만들기 위한 상위 레벨 환경DisplayFigureLightweightSystem 내에 컴포넌트 또는 컨테이너Shell, Control, CompositeGraphicsFigure 내에 그래픽 영역을 제공GCGC LightweightSystem 클래스는 Display 클래스와 유사하다. 시각적으로 보여주는 것은 없지만, 이벤트 핸들링을 제공하고 외부환경과상호 작용을 하는 역할을 한다. LightweightSystem 클래스는 운영체제와 동 떨어진 계층에서 작동한다. Draw2d의 기본적인 구조는 Canvas -> ..

    Drag & Drop 구현 방법

    어플리케이션에 항목 드롭하기등록된 컨트롤에 데이터를 올려 놓을 경우 데이터를 받아 들일 수 있으며, 이때 DropTarget의 인스턴스를 사용한다.DropTarget은 위젯이 선택할 수 있는 데이터의 유형과 그 위젯에서 수행하기로 공인된 동작, 두 가지 모두 저장할 수 있다. 운영체제가 이러한 정보를 사용하여 항목이 해당 위젯을 지나갈 때 그 항목을 놓을 수 있는지에 대한 가시적인 피드백을 제공한다.우선 타겟을 등록하면, DropTargetListener가 DropTargetEvent를 받으며, 이 이벤트는 사용자가 컨트롤내에 어떤 것을 놓을때 발생한다. 연산 상수설명DROP_COPY 항목을 컨트롤 안이나 밖으로 드래그 할 때 복사한다.DROP_MOVE마우스를 놓은 위치로 항목을 이동시킨다.DROP_LI..

    이벤트로 받은 키보드 멀티 인식 방법

    (event.stateMask & SWT.CTRL) != 0 && event.keyCode == 'p' Ctrl + P

    RCP 확장점 소개

    확장점은 기능 단위를 느슨하게 결합시키기 위한 메커니즘으로 이클립스 전반에 걸쳐 사용된다. 하나의 플러그인은 플러그인 내역서(Menefiset.MF)에서 확장점을 선언하며. 다른 개발자가 사용할최소한의 인터페이스와 관련 클래스를 노출시킨다. 다른 플러그인은 확장점에 대한 확장을 선언하고 적절한 인터페이스를 구현하며제공된 클래스를 기반으로 구성 요소를 참조하거나 구축한다. 각 확장점은 플러그인의 식별자와 마침표 뒤에 알파벳,숫자, 밑줄(_)로 이루어진 단순 식별자를 붙여 구성한 유일한 식별자를 갖는다.확장점을 선언할때는 단순식별자만을 사용한다. 확장점에 대한 확장을 선언할때는 확장점에 대한 전체 식별자를 사용한다. 확장점의 사용되어야할 스키마 정의를 나타내는 exsd모든 확장점은 확장점이 어떻게 사용되어야..

    rcp toolbar에서 label등 각종 contribution item 생성방법

    ToolBarManager manager = new ToolBarManager(SWT.FLAT | SWT.HORIZONTAL); LabelContributionItem labelItem = new LabelContributionItem("myLabelId"); //Label ContibutionItem 생성 manager.add(labelItem); TextContributionItem textItem = new TextContributionItem("myTextId"); manager.add(textItem); ToolBar toolbar = manager.createControl(parent); return toolbar; 출처:

    rcp dialog 화면 가운데 출력

    public Point getCenterPoint() { Shell parentShell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); Rectangle shellBounds = parentShell.getBounds(); return new Point(shellBounds.x + shellBounds.width / 2, (shellBounds.y + shellBounds.height) / 2); }Then simply override the getInitialLocation method of Dialog; @Override protected Point getInitialLocation(Point initialSize) { Poin..

    Eclipse GEF 개념 설명

    1. GEF(Graphical Editing Framework)?- 말그대로 framework. 그래픽 쪽을 다루기 위한 framework. 모델을 그래픽적으로 다룰 때 쓰는 것. 기본적으로는 MVC(Model - View - Controller) 체제에 맞추어져 있다. 어떠한 정보들은 Model이 갖고 있고, 그것을 화면에 보여주는 역할을 하는 것은 View 쪽에서, 관리하는 것은 Controller 쪽에서 하는 형식이다 각 부분별로 다음 부터 보자. 2. Model- GEF 에서의 Model 은 기본적으로 Object 형으로 처리한다.그리고 모델은 항상 최상위 모델의 child 관계로 존재해야 한다. 예를 들면 최상위 모델을 보여주는 화면의 배경이라고 하면, 모든 모델은 이 배경의 child 로 존재..

    JFace Dialog에서 레이아웃 설정으로 버튼 바 숨기기

    JFace Dialog에서 레이아웃 설정으로 버튼 바 숨기기 protected void createButtonsForButtonBar(final Composite parent){ GridLayout layout = (GridLayout)parent.getLayout(); layout.marginHeight = 0; }

    java GUI 툴 SWT vs Swing vs AWT

    자바에서 사용되는 그래픽 유저 인터페이스(GUI)툴중 대표적인 종류는 3가지이다. AWT SWING SWT/JFACE 각각 마다 동작하는 방식이 다르기 때문에 장단점이 다르다. 서로의 특징을 알아보자 1. AWT- Abstract Windows Toolkit (AWT)는 오리지널 자바의 GUI툴킷- 자바의 런타임의 일부로 안정되고, 추가 설치가 필요 없음- 대개의 경우 리소스관리를 프레임워크에서 처리- UI 쓰레드를 신경쓰지 않아도 됨 (그러나 성능의 문제가 됨)- 콘테이너 없이 콤포넌트 생성 및 콘테이너 변경 가능- 풍부한 그래픽 환경 제공- 각 OS별 최소한의 공통 기능의 wrapper를 구현함으로써 제한적 기능을 제공- 일반적으로 사용되는 테이블, 트리, 진행 바 같은 것은 애플리케이션 레이어에서 ..

    eclipse 범용 UI JFace 소개

    Jface - SWT는 윈도우에서 정의한 위젯에 대한 접근을 제공한다면, JFace는 범용 UI 개념을 위한 구조와 편의기능을 제공한다. - JFace는 SWT와 다르게 윈도우 시스템에 독립적이며 SWT와 동시에 활용될 수 있다. - JFace는 UI 툴킷 컴포넌트의 모든 영역을 담당한다. 이미지, 폰트, 레지스트리 텍스트 지원, 대화창 ,환경설정, 마법사를 위한 프레임워크, Action, Viewer같은 것들을 담당한다.

    RCP프레임워크 재료인 SWT 소개와 단점

    SWT swt 소개 SWT는 각 운영체제마다 운영체제 고유의 UI 모양과 동작을 제공하는데, 실제로 UI를 운영체제의 자원을 이용하여 구성하고, 그 동작을 운영하는 것도 운영체제이기 때문이다. 예를 들어 윈도우즈용 SWT는 GDI(Graphic Device Interface. 마이크로 소프트 윈도우즈의 어플리케이션 개발 API)자원을 이용하여 UI를 만든다. swt 단점 - 자원의 한계 단점으로, 운영체제 자원을 추상화한 SWT 객체는 사용이 끝나면 dispose() 메서드를 호출해 반드시 운영체제에게 돌려주어야 한다. 만약 너무 많은 수의 운영체제 자원을 할당 받으면, 실행중인 다른 응용프로그램까지 악영향을 미칠 수 있고, 운영체제가 더이상 자원을 할당하는 것을 거부할 수 도 있다. swt 단점 - 메..

    RCP 프레임워크의 Extension and Extension Points

    Extension and Extension Points 모듈 소프트웨어를 만드는 기본적인 규칙은 컴포넌트간 커플링을 피하는 것이다. 만약 컴포넌트가 강력하게 통합되어 있다면, 서로 다른 설정들을 조작하거나 시스템의 변화없이 다르게 구현된 컴포넌트로 교체하는 것이 힘들게 된다. 이클립스에서 커플링을 줄이는 것은 extensions / extension points(이하 확장/확장지점)를 통해서 이루어진다. - Extension자신의 플러그인에 다른 플러그인(view, editor)등을 사용하여 기능적으로 확장하고 싶은경우에 플러그인의 extension에 정의를 한다. - Extension pointsextension point는 extension이 반드시 따라야 하는 자바 인터페이스와 xml을 조합한 명세..

    현재 화면의 활성화된 shell 얻는 방법

    PlatformUI.getWorkbench().getDisplay().getActiveShell()

    Tableviwer와 편집모드, 컨텍스트 메뉴 생성

    package Table; import org.eclipse.jface.action.Action;import org.eclipse.jface.action.IAction;import org.eclipse.jface.action.MenuManager;import org.eclipse.jface.viewers.CellEditor;import org.eclipse.jface.viewers.ColumnWeightData;import org.eclipse.jface.viewers.ComboBoxCellEditor;import org.eclipse.jface.viewers.ICellModifier;import org.eclipse.jface.viewers.ILabelProviderListener;import org...

    JFace의 treeList 예제

    Ch8List.Javapackage Ch8; import java.util.ArrayList;import java.util.List; import org.eclipse.jface.viewers.IStructuredContentProvider;import org.eclipse.jface.viewers.LabelProvider;import org.eclipse.jface.viewers.ListViewer;import org.eclipse.jface.viewers.ViewerFilter;import org.eclipse.jface.viewers.ViewerSorter;import org.eclipse.jface.viewers.Viewer;import org.eclipse.swt.SWT;import org.ec..

    JFACE TreeViewer 예제

    TreeViewer 메뉴- 모든 TreeViewr 구조의 예제를 제작해보았다. 1. Ch8TreeCompositepackage Ch8Tree; import java.util.ArrayList;import java.util.List; import org.eclipse.jface.viewers.ITreeContentProvider;import org.eclipse.jface.viewers.TreeViewer;import org.eclipse.jface.viewers.Viewer;import org.eclipse.swt.SWT;import org.eclipse.swt.layout.FillLayout;import org.eclipse.swt.widgets.Composite; public class Ch8Tree..

    SashForm 소개와 예제

    SashForm은 이동이 가능한 경계선을 자식 위젯 사이에 생성함으로써 하나의 위젯을 늘리면 다른 한쪽이 감소하게 만들 수있다. Sash 클래스는 대부분 위젯처럼 org.eclipse.swt.widges패키지에 위치하지만 SashForm 크래스는 org.eclipse.swt.custom 패키지에서 찾을 수 있다. Public Ch3_SashForm(Composite parent){Super(parent, SWT.NONE); SashForm sf = new SashForm(this, SWT.VERTICAL);Sf.setsize(120,80); Button button1 = new Button(sf, SWT.ARROW | SWT.UP);Button1.setSize(120,40); Button button2 ..

    SWT의 Text와 StyledText

    SWT에서는 Text와 StyledText 두가지를 제공한다. Text는 여러 이벤트를 연관 시킬 수 있다.addModifyListener() // 텍스트 수정 리스너addSelectionListener() // 컨트롤 선택 리스너addVerifyListener() // 텍스트에 변화가 일어났을때 발생Append() // 추가Insert() 대체setSelection(), selectAll() // 선택setEchoCharacter() // 사용자가 타이핑 하는 문자 대신 보여줄 다른 문자열 지정setEditable() // 편집을 가능하게 하거나 불가능하게 한다.setFont() StyledText는 text에서 제공하는 모든 메소드를 제공하고 폰트, 텍스트 색상, 폰트 스타일 등으 ㅣ기능이 추가된다...