RCP/SWT & JFACE

JFace TreeViewer설명

반응형

Viewer

Viewer는 MVC 패턴을 가지고 있다.

Viewer의 하위 클래스인 ContentVier와 StructuredViewer가 있다.

 

ContentViewer는 다양한 인터페이스를 활용해서 도메인 객체 형태를 유지하면서 데이터를 다룬다. 이들 인터페이스는 이름 앞에 I를 붙인다. 이러한 인터페이스는 확장점을 표시하며 이를 사용하여 애플리케이션의 맞춘 로직을 프레임워크에 넣을 수 있다.

 

StructuredViewer는 ContentViewer에게 제공하는 데이터를 구조화 한다. 구조화는 필터링, 정렬 기능 같은 일반적인 작업을 실행하는 메도드들이 이 계층에서 구현된다.

 

각 위젯인 Tree, List, Table 등은 이에 맞는 Viewer의 하위 클래스로 ListViewer나 tableViewer 등이 있다.

 

위젯은 기껏해야 하나의 Viewer와 연결하도록 되어 있고, 연결이 완료되고 나면 모든 작업은 Viewer를 통해서만 해야한다. 위젯과 뷰어에서 동작을 섞어서 처리하다 보면 나중에 꼬일 수 있다.


viewer은 대부분 구성이 비슷하여 하나의 viewer만 잘 공부하면 나머지도 어느 정도 이해할 수 있다.

 

 

주요 Viewer 메소드

getControl()

GetSelection()

Refresh()

SetInput()

 

주요 ContentViewer 메소드

setContentProvider()

SetLabelProvider()

 

주요 StructuredViewer

addFilter()

Reveal()

SetSorter()

 

ContentViewer의 프로 바이더

프로바이더에는 두 개가 존재한다. ContentProvider, LabelProvider.

 

컨텐츠 프로바이더는 화면에 나타날  있는 항목의 전체 집합을 반환한다

 집합을 뷰어에 부착된 뷰어에 부착된 어떤필터에든 넘길  있다.


레이블 프로바이더는 이들을 어떻게 화면에 나타낼지 결정한다.

 

 

Viewer의 첫 번째 하위 클래스인 ContentViewer는 위젯에서 보일 데이터를 다루는 기능을 추가하며, MVC의 M(모델) 부분을 제공한다.

 

1) LabelProvider

레이블 프로바더는 ILabelProvider나 ITableLabelProvider를 구현하는데, 두 인터페이스 모두 IBaseLabelProvider를 확장 했다.

 

ILabelProvider와 ITableLabelProvider는 비슷한 성향을 가지며, ITableLabelProvider는 테이블열을 다루지만 ILabelProvider는 일차원 데이터만 가정한다.

 

레이블 프로바이더의 로직은 세 개의 메소드로 작성할 수 있다.

첫 번째는 isLabelProperty()로 IBaseLabelProvider에서 정의한다.

-> 객체와 프로퍼티 이름을 받아 부울 값을 반환한다. 해당 부울값은 주어진 프로퍼티를 변경할 때 시각적으로 보이는 레이블을 업데이트 해야하는지 나타낸다.

 

두 번째로 getText()와 getImage() 메소드를 통해 해당 객체에 보여줄 텍스트랑 이미지를 설정한다.

 

2) ContentProvider

ContentProvider 레이블 프로바이더로 관여하기도 하지만 컨텐트 프로바이더로도 역할을 한다.

 

레이블 프로바이더가 요소를 보이기 위한 텍스트이미지를 제공하는 반면에 컨텐츠 프로바이더는 실제적으로 요소를 보이게끔 해준다.

 

IStructuredContentProvider getElements() 메소드를 정의하는데, getElements() 메소드는 Object 입력으로 받아들여서 위젯에 보여줄 Object 배열을 반환한다. Viewer에서 setInput() 호출할 객체는 컨텐트 뷰어에게 매개변수로 전달한다컨텐트 프로바이더는 위젯에 의해 보여지는 도메인 객체들의 콜렉션을 반환하기 위해  매개변수를 이용한다.

 

 개의 메소드는 필수로 구현하지 않아도 되는데  것은 dispose() inputChanged(Viewer viewer, Object oldInput, Object newInput)이다우선 dispose() 페기될  깨끗이 정리할때 정의하는 메소드이다.

inputChanged 뷰어가 컨텐츠 프로바이더에게 최상위 입력 객체를 바꾸웠다고 통지할  사용한다.

 

 

트리(Tree)

SWT에서 제공하는 Tree 위젯과 Jface에서의 TreeViewer 트리를 사용할  있다.

 

1. SWT 트리

일반적인 Tree 특별하게 유용한 인터페이스를 가지지 않는다.

- addSelectionListener() 선택 이벤트의 통지를 가능하게 한다.

- addTreeListener()  TreeListener 인터페이스는 트리의  수준을 펼치거나 줄일  통지하기 위한 콜백을 제공한다.

- Select() / deselect() 현재 선택 사항을 변경한다.

- getSelection() 현재 선택 항목을 얻는다.

- Show() 주어진 항목을 보일 때까지 컨트롤을 스크롤 한다.

 

1-1) TreeItem

TreeItem Tree 항목을 추가하기 위해 사용되는 클래스이다.

TreeItem 내용을 나타내는 것을 덧붙여부모와 자식 항목의 관계를 유지한다.

SWT.SINGLE, SWT.MULTI 스타일을 통해 트리 스타일을 지정할  있으며 SWT.CHECK 체크박스를 사용하여 트리 옆에 checkbox 생성   있다.

TreeItem setText(), setImage() 메소드를 사용하여  보여주고자 텍스트와 이미지를 수정하기 위해 제공한다.

직접 TreeItem들을 생성하고 조작하여 트리를 구축할  있지만 너무 어렵기 때문에 Tree Viewer 사영하여 애플리케이션의 로직에 초점을 맞추고 사용자 인터페이스 요소의 상세 항목에  신경   있다.

 

1-2) TreeViewer

TreeViewer 모든 Viewer 공통적으로 제공하는 필터링과 정렬 기능 뿐만 아니라 레이블 프로바이더 기능도 제공한다


반응형

'RCP > SWT & JFACE' 카테고리의 다른 글

rcp프레임워크의 shell객체의 이벤트 처리 설명  (0) 2016.12.24
event doit 설명  (0) 2016.12.24
JFace TreeViewer설명  (0) 2016.12.24
IWizardPage 인터페이스  (0) 2016.12.24
Draw2d 설명  (0) 2016.12.24
Drag & Drop 구현 방법  (0) 2016.12.24