SWT Tips and Samples 基礎編 > TreeViewer |
|
TreeViewerTreeViewerはJFaceに提供されているツリーを作るためのフレームワークです。このフレームワークを使うことでツリーをモデルとビューに切り分けて作ることができます。ここではモデルをIContentProviderで実装し、子供の要素を返すメソッドをオーバーライドしています。またビューとしては、LabelProviderを継承しツリーの要素に対応した要素名を返すメソッドをオーバーライドしています。それらのモデルとビューをTreeViewerクラスのsetContentProviderメソッドとsetLabelProviderメソッドで追加します。 TreeViewer tv = new TreeViewer(shell, SWT.BORDER | ...); tv.setContentProvider(new TreeContentProvider(...)); //setInputで与えた要素の子供の要素がツリーの最上位として表示される。 tv.setInput(...); tv.setLabelProvider(new TreeLabelProvider(...)); ... class TreeContentProvider implements ITreeContentProvider{ public Object[] getChildren(Object parentElement) { //親Elementが展開されたときの子供のElementを示す配列を用意する。 return ... } .... } class LabelContentProvider extends LabelProvider{ public String getText(Object element) { //ツリーの要素に表示される文字列をここで作る。 return ... } ... } サンプルプログラムサンプルでは、1つの要素それぞれに5つの要素が存在し、それが無限に続いている構造をツリーで表現しています。 ソースコード (TreeViewerTest.java)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.layout.*; import org.eclipse.swt.widgets.*; public class TreeViewerTest extends ApplicationWindow { public TreeViewerTest() { super(null); } public static void main(String[] args) { ApplicationWindow w = new TreeViewerTest(); w.setBlockOnOpen(true); w.open(); Display.getCurrent().dispose(); } protected Control createContents(Composite parent) { getShell().setText("TreeViewTest"); Composite container = new Composite(parent, SWT.NONE); container.setLayout(new FillLayout()); TreeViewer tv = new TreeViewer(container, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); tv.setContentProvider(new TreeContentProvider()); tv.setInput("Element"); tv.setLabelProvider(new TreeLabelProvider()); return container; } } class TreeContentProvider implements ITreeContentProvider{ public Object[] getChildren(Object parentElement) { String str = (String)parentElement; String [] children = new String[5]; for (int i=0; i<children.length; i++){ children[i] = str + "-"+ i; } return children; } public Object getParent(Object element) { String str = (String)element; int index = str.lastIndexOf("-"); return str.substring(0, index); } public boolean hasChildren(Object element) { return true; } public Object[] getElements(Object inputElement) { return getChildren(inputElement); } public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } } class TreeLabelProvider extends LabelProvider{ public String getText(Object element) { String str = (String)element; return "[" + element + "]"; } } 参考TreeViewerには、ある条件の要素を表示しないようにするなどのフィルター機能も用意されています。より詳しいTreeViewerに関する説明は以下のリンクを参照してください。
最新更新日: 2004年10月20日 |
- PR -
【Sony】大手他社よりも安い!ビジネス向け光・100Mしかも固定IP付!今なら更に初期費用最大15,000円OFF!
オフィス用品・オフィス家具 価 格 交 渉 可!
|
||||
|
|||||
Copyright(C) 2003,2004 Jasmin Project. All Right Reserved. |
SEO | [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送 | ||