[JFace] 뷰어와 뷰어 프레임 워크
뷰어 프레임워크는 MVC(모델-뷰-컨트롤)로 알려진 디자인 패턴으로 구현된다.
Viewer의 하위 클래스인 ContentVier와 StructuredViewer가 있다.
ContentViewer는 다양한 인터페이스를 활용해서 도메인 객체 형태를 유지하면서 데이터를 다룬다.
StructuredViewer는 ContentViewer에게 제공하는 데이터를 구조화 한다. 구조화는 필터링, 정렬 기능 같은 일반적인 작업을 실행하는 메도드들이 이 계층에서 구현된다.
각 위젯인 Tree, List, Table 등은 이에 맞는 Viewer의 하위 클래스로 ListViewer나 tableViewer 등이 있다.
ㅁ ContentViewer의 프로 바이더
프로바이더에는 두 개가 존재한다. ContentProvider, LabelProvider
▶ LabelProvider,TableLabelProvider 보여줄 텍스트랑 이미지를 설정
▶ ContentProvider는 레이블 프로바이더로 관여하기도 하지만 컨텐트 프로바이더로도 역할을 한다.
레이블 프로바이더가 요소를 보이기 위한 텍스트, 이미지를 제공하는 반면에 컨텐츠 프로바이더는 실제적으로 요소를 보이게끔 해준다.
※ 내용정리 참고: https://wedul.site/70
JFace TreeViewer설명
Viewer Viewer는 MVC 패턴을 가지고 있다. Viewer의 하위 클래스인 ContentVier와 StructuredViewer가 있다. ContentViewer는 다양한 인터페이스를 활용해서 도메인 객체 형태를 유지하면서 데이터를 다룬다. 이들..
wedul.site
ㅁ TableViewer의 예제
1) 일단 모델부터
package com.dicws.mydays.model;
import java.util.ArrayList;
import java.util.List;
public class MyDaysModel {
//모델요소
String part;
String title;
String conetents;
String writer;
String wDate;
//table모델시
public MyDaysModel(String part, String title, String conetents, String writer, String wDate) {
super();
this.part = part;
this.title = title;
this.conetents = conetents;
this.writer = writer;
this.wDate = wDate;
}
/*Getter/Setter 정의*/
public String getPart() {
return part;
}
public void setPart(String part) {
this.part = part;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getConetents() {
return conetents;
}
public void setConetents(String conetents) {
this.conetents = conetents;
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public String getwDate() {
return wDate;
}
public void setwDate(String wDate) {
this.wDate = wDate;
}
}
2) 실행모듈정의 및 설명
package com.dicws.mydays.test;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import com.dicws.mydays.model.MyDaysModel;
public class TableSnippet extends ApplicationWindow {
List<MyDaysModel> input = new ArrayList<MyDaysModel>();
public TableSnippet() {
super(null);
}
public void run() {
// Don't return from open() until window closes
setBlockOnOpen(true);
// Open the main window
open();
// Dispose the display
Display.getCurrent().dispose();
}
/**
* Configures the shell
*
* @param shell
* the shell
*/
protected void configureShell(Shell shell) {
super.configureShell(shell);
shell.setText("Team Tree");
}
/**
* Creates the main window's contents
*
* @param parent
* the main window
* @return Control
*/
protected Control createContents(Composite parent) {
//table data 생성
for (int i = 1; i < 10; i++) {
input.add(new MyDaysModel("상환전화 i:" + i, "입금상환", "내용", "나야나1", "aa"));
}
TableViewer tableViewer = new TableViewer(parent, SWT.BORDER | SWT.FULL_SELECTION);
Table table = tableViewer.getTable();
/*
* Header Column 생성
*/
String[] COLUMN_HEADER = new String[]{"타이틀","제목","내용","작성자","작성일"};
for(String header : COLUMN_HEADER ) {
new TableColumn(tableViewer.getTable(), SWT.NONE).setText(header);
}
//table.layout(); // 레이아웃을 수동으로 갱신해야할 경우에 사용
table.setLinesVisible(true);
table.setHeaderVisible(true);
tableViewer.setUseHashlookup(true); // table 렌더링 속도 향상
// Column Properties 지정 : ICellModifier 동작시 필수
tableViewer.setColumnProperties(COLUMN_HEADER);
tableViewer.setContentProvider(new IStructuredContentProvider() {
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
// TODO 자동 생성된 메소드 스텁
}
@Override
public void dispose() {
// TODO 자동 생성된 메소드 스텁
}
@Override
public Object[] getElements(Object inputElement) {
return ((ArrayList<MyDaysModel>)input).toArray();
}
});
tableViewer.setLabelProvider(new ITableLabelProvider() {
@Override
public void removeListener(ILabelProviderListener listener) {
// TODO 자동 생성된 메소드 스텁
}
@Override
public boolean isLabelProperty(Object element, String property) {
// TODO 자동 생성된 메소드 스텁
return false;
}
@Override
public void dispose() {
// TODO 자동 생성된 메소드 스텁
}
@Override
public void addListener(ILabelProviderListener listener) {
// TODO 자동 생성된 메소드 스텁
}
@Override
public String getColumnText(Object element, int columnIndex) {
MyDaysModel myDays = (MyDaysModel)element;
switch (columnIndex) {
case 0:
return myDays.getPart();
case 1:
return myDays.getTitle();
case 2:
return myDays.getConetents();
case 3:
return myDays.getWriter();
case 4:
return myDays.getwDate();
}
return "";
}
@Override
public Image getColumnImage(Object element, int columnIndex) {
// TODO 자동 생성된 메소드 스텁
return null;
}
});
tableViewer.setInput(input);
tableViewer.refresh();
for (int i = 0, n = table.getColumnCount(); i < n; i++) {
table.getColumn(i).pack();
}
table.pack();
/*
* Cell Modify 기능추가
*/
// // Column Properties 지정 : ICellModifier 동작시 필수
// tableViewer.setColumnProperties(COLUMN_HEADER);
//
// // CellEditor 생성
// CellEditor[] CELL_EDITORS = new CellEditor[COLUMN_HEADER.length];
// for(int i=0; i < CELL_EDITORS.length ; i++) {
// CELL_EDITORS[i] = new TextCellEditor(tableViewer.getTable());
// // or CheckboxCellEditor, ComboBoxCellEditor 등 사용
// }
// tableViewer.setCellEditors(CELL_EDITORS);
return table;
}
/**
* The application entry point
*
* @param args
* the command line arguments
*/
public static void main(String[] args) {
new TableSnippet().run();
}
}
ㅁ TreeViewer의 예제
1) 일단 모델부터
package com.dicws.mydays.model;
import java.util.ArrayList;
import java.util.List;
public class MyDaysModel {
String part;
String title;
String conetents;
String writer;
String wDate;
//tree모델시
public MyDaysModel parent; // 부모노드
public List<MyDaysModel> child = new ArrayList(); // 자식노드
public int counter;
//tree모델시
public MyDaysModel(int counter, MyDaysModel parent) {
this.parent = parent;
this.counter = counter;
}
//tree모델시 : 데이터만 set
public void setTreeData(String part, String title, String conetents, String writer, String wDate) {
this.part = part;
this.title = title;
this.conetents = conetents;
this.writer = writer;
this.wDate = wDate;
}
public String getPart() {
return part;
}
public void setPart(String part) {
this.part = part;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getConetents() {
return conetents;
}
public void setConetents(String conetents) {
this.conetents = conetents;
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public String getwDate() {
return wDate;
}
public void setwDate(String wDate) {
this.wDate = wDate;
}
}
2) 실행모듈정의 및 설명
package com.dicws.mydays.test;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import com.dicws.mydays.model.MyDaysModel;
import com.dicws.mydays.provider.MyDaysTreeContentProvider;
import com.dicws.mydays.provider.MyDaysTreeLblProvider;
public class TreeSnippet1 extends ApplicationWindow {
MyDaysModel input;
public TreeSnippet1() {
super(null);
}
public void run() {
// Don't return from open() until window closes
setBlockOnOpen(true);
// Open the main window
open();
// Dispose the display
Display.getCurrent().dispose();
}
/**
* Configures the shell
*
* @param shell
* the shell
*/
protected void configureShell(Shell shell) {
super.configureShell(shell);
shell.setText("Team Tree");
}
/**
* Creates the main window's contents
*
* @param parent
* the main window
* @return Control
*/
protected Control createContents(Composite parent) {
TreeViewer treeViewer = new TreeViewer(parent, SWT.BORDER);
Tree tree = treeViewer.getTree();
tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 6, 1));
// tree.setLayout(new TreeColumnLayout());
tree.setHeaderVisible(true);
tree.setLinesVisible(true);
treeViewer.setContentProvider(new ITreeContentProvider() {
@Override
public void inputChanged(Viewer viewer, Object obj, Object obj1) {
// TODO 자동 생성된 메소드 스텁
}
@Override
public void dispose() {
// TODO 자동 생성된 메소드 스텁
}
@Override
public boolean hasChildren(Object obj) {
// TODO 자동 생성된 메소드 스텁
return false;
}
@Override
public Object getParent(Object obj) {
// TODO 자동 생성된 메소드 스텁
return null;
}
@Override
public Object[] getElements(Object inputElement) {
return ((MyDaysModel)inputElement).child.toArray();
}
@Override
public Object[] getChildren(Object parentElement) {
return getElements(parentElement);
}
});
treeViewer.setLabelProvider(new ILabelProvider() {
@Override
public void removeListener(ILabelProviderListener ilabelproviderlistener) {
// TODO 자동 생성된 메소드 스텁
}
@Override
public boolean isLabelProperty(Object obj, String s) {
// TODO 자동 생성된 메소드 스텁
return false;
}
@Override
public void dispose() {
// TODO 자동 생성된 메소드 스텁
}
@Override
public void addListener(ILabelProviderListener ilabelproviderlistener) {
// TODO 자동 생성된 메소드 스텁
}
@Override
public String getText(Object element) {
return ((MyDaysModel)element).getPart();
}
@Override
public Image getImage(Object obj) {
// TODO 자동 생성된 메소드 스텁
return null;
}
});
TreeColumn column1 = new TreeColumn(tree, SWT.LEFT);
column1.setText("Column 1");
TreeColumn column2 = new TreeColumn(tree, SWT.LEFT);
column2.setText("Column 1");
setTree();
treeViewer.setInput(input);
treeViewer.refresh();
for (int i = 0, n = tree.getColumnCount(); i < n; i++) {
tree.getColumn(i).pack();
}
tree.pack();
return treeViewer.getTree();
}
private void setTree() {
// new LabelView();
MyDaysModel root = new MyDaysModel(0, null);
MyDaysModel tmp;
for (int i = 1; i < 10; i++) {
tmp = new MyDaysModel(i, root);
tmp.setTreeData("상환전화 i:" + i, "입금상환", "내용", "나야나1", "aa");
root.child.add(tmp);
for (int j = 1; j < i; j++) {
MyDaysModel tmp1 = new MyDaysModel(j, tmp);
tmp1.setTreeData("상환전화 j:" + j, "입금상환", "내용", "나야나1", "aa");
tmp.child.add(tmp1);
}
}
input = root;
}
/**
* The application entry point
*
* @param args
* the command line arguments
*/
public static void main(String[] args) {
new TreeSnippet1().run();
}
}
참고 사이트 : wiki.eclipse.org/JFaceSnippets#Snippet002_-_Tree_Viewer
JFaceSnippets - Eclipsepedia
JFace-Snippets are small and easy understandable programming examples of how to use the JFace API. To browse the examples, navigate to the examples GIT repository. Copy Paste The header section of each snippet is a link to the plain source. You can copy th
wiki.eclipse.org
참고 사이트 : www.java2s.com/Code/Java/SWT-JFace-Eclipse/CatalogSWT-JFace-Eclipse.htm
SWT JFace Eclipse « Java
java2s.com | © Demo Source and Support. All rights reserved.
www.java2s.com