エクスプローラの左にあるようなツリー上のデータ構造を表示するウィジェットとして、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();
この記事は
現在のアクセス:1175