SWT Tips and Samples 基礎編 > TreeViewer

 

TreeViewer

TreeViewerは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に関する説明は以下のリンクを参照してください。

  • スタンドアローン・モードでJFaceおよびSWTを起動する 第1回 | 第2回 | 第3回
    (IBM Developer Worksの記事)
    JFaceのフレームワークを使ったスタンドアローンのアプリケーション作成方法が非常に丁寧に説明されています。この記事をよめばJFaceの概要とJFaceを使った簡単なアプリケーションが作成できるでしょう。JFaceのテーブルとツリーを使った簡単なファイルビューアをサンプルプログラムとして作成しているので、MVCモデルに沿ったテーブルとツリーの作り方も理解できます。


最新更新日: 2004年10月20日
 
関連リンク
Eclipse API ドキュメント
TreeViewer
ITreeContentProvider
LabelProvider
Viewer

- PR -

プレゼンテーション作成ソフト無料お試し版配信中

【Sony】大手他社よりも安い!ビジネス向け光・100Mしかも固定IP付!今なら更に初期費用最大15,000円OFF!

オフィス用品・オフィス家具 価 格 交 渉 可! 
◎ 目指せ★業界最安値 ★ ◎ オフィネット・ドットコム株式会社

注文から納品まで驚きの早さ!!【ASKULカタログ】はこちらから・・・

マイクロソフト お得な見積! まとめての購入ならオトクな方法で。ライセンスだから管理も簡単。


Copyright(C) 2003,2004 Jasmin Project. All Right Reserved.
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送