- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2021-12-14T02:38:56+00:00","","")
#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]
***ツリーを開く、閉じる。 [#za2a4fb4]
treeViewer.expandAll();
treeViewer.collapseAll();
----
この記事は
#vote(おもしろかった[2],そうでもない[1])
#vote(おもしろかった[8],そうでもない[2])
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}