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

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

モデルの渡し方

TreeViewer?に表示したいコンテンツは

TreeViewer#setInput(Object object); <-ツリー構造のトップを渡す感じ?

TreeViewer?に渡します。とにかく、それだけです。あとはそれぞれのプロバイダに処理が依頼されます。

表示するコンテンツの指定

表示するコンテンツは、コンテンツプロバイダをつかって指定します。コンテンツプロバイダは、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);
}

などとすればよいようです。ようするに、ツリーの子要素を返すメソッド、子要素があるかどうかを返すメソッドなどを実装すればよいようです。

表示の仕方の指定

ツリーを開く、閉じる。

treeViewer.expandAll();
treeViewer.collapseAll();

この記事は

選択肢 投票
おもしろかった 8  
そうでもない 2  

現在のアクセス:577


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-12-14 (火) 11:38:56 (1089d)