| 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] 花 おまとめローン Windows7 冷え性対策 | 動画 掲示板 レンタルサーバー ライブチャット SEO | |