#topicpath
----

エクスプローラの左にあるようなツリー上のデータ構造を表示するウィジェットとして、org.eclipse.jface.viewers.TreeViewer があります。それを使ってみました。

#contents


TreeViewer は「表示するコンテンツ」と「表示のさせ方」がProviderという考え方でうまく分離されています。

***モデルの渡し方 [#x7a3463f]
TreeViewerに表示したいコンテンツは
 TreeViewer#setInput(Object object); <-ツリー構造のトップを渡す感じ?
でTreeViewerに渡します。とにかく、それだけです。あとはそれぞれのプロバイダに処理が依頼されます。

***表示するコンテンツの指定 [#qc4b2295]
表示するコンテンツは、コンテンツプロバイダをつかって指定します。コンテンツプロバイダは、setInputで渡されたモデルの、ツリー構造を説明(?)するためのものです。
プロバイダの指定方法は
 TreeViewer#setContentProvider(ITreeContentProvider provider);
とします。

ITreeContentProviderの実装で、ツリー構造を説明する方法は、たとえば(渡されるモデルが、java.io.Fileと仮定しています)
 public Object[] getChildren(Object parent) {
     File[] children = ((File) parent).listFiles(new FileFilter() {
         //ディレクトリだけを返す、フィルタ
         public boolean accept(File pathname) {
             if (pathname.isDirectory()) {
                 return true;
             }
             return false;
         }
     });
     return children == null ? new Object[0] : children;
     //(自分内のディレクトリを返す、または空の配列)
 }
 
 public boolean hasChildren(Object element) {
     return getChildren(element).length > 0;
     //(自分内にディレクトリがあるかどうか)
 }
 
 public Object[] getElements(Object input) {
     return getChildren(input);
 }
などとすればよいようです。ようするに、ツリーの子要素を返すメソッド、子要素があるかどうかを返すメソッドなどを実装すればよいようです。



***表示の仕方の指定 [#q19ef3e9]


**TIP集 [#lb5222ff]
***どのカラムをクリックしてもその行を選択状態にする [#lee5a252]
 viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
                | SWT.V_SCROLL|SWT.FULL_SELECTION);

SWT.FULL_SELECTION がポイントです((クリックに反応して選択した行を変えようと思って、いろんなリスナを探してしまった))。
      

***プロパティ値を設定する。 [#nc785d79]
 String[] properties = new String[] { "text", "check", "color", "combo" };
 // カラム・プロパティの設定
 viewer.setColumnProperties(properties);
は
 ICellModifier#getValue(Object element, String property)
のproperty値になります。


----
この記事は
#vote(おもしろかった,そうでもない)

#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS