S-JIS[2013-01-29/2013-02-10] 変更履歴

Eclipseプラグイン ツリービューアー

Eclipseプラグイン開発で扱うツリーについて。


概要

TreeViewerクラスでツリー構造を扱う。


import org.eclipse.jface.viewers.TreeViewer;
	int style = SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL;
//	int style = SWT.MULTI  | SWT.H_SCROLL | SWT.V_SCROLL;

	TreeViewer viewer = new TreeViewer(parent, style);
	viewer.setContentProvider(new MyContentProvider());
	viewer.setLabelProvider(new MyLabelProvider());
	viewer.setInput(root);

スタイルのSINGLE/MULTIは、単一選択/複数選択可能かどうかを指定するもの。

ContentProviderはツリーの(階層)データを提供するクラス。
LabelProviderはノード(要素)にラベルを付けたい場合に指定する。

setInput()でデータそのものを渡す。
これがContentProviderやLabelProviderに渡されるので、それに応じた処理を記述する。

アウトラインページでツリーを使う例


ダブルクリックで開閉する方法

TreeViewerでは、表示されている各ノード(要素)の左側の(開閉を示す)アイコンをクリックすることでツリーが開いたり閉じたりする。
が、デフォルトでは、ノードの文字列をダブルクリックしてもそういった動作は起こらない。

そこで、文字列をダブルクリックした場合にツリーを開閉するコードを書いてみた。

import java.util.List;

import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.IStructuredSelection;
	TreeViewer viewer = new TreeViewer(parent, style);
	viewer.addDoubleClickListener(new IDoubleClickListener() {
		@Override
		public void doubleClick(DoubleClickEvent event) {
			IStructuredSelection selection = (IStructuredSelection) event.getSelection();
			if (selection.isEmpty()) {
				return;
			}
			List<?> list = selection.toList();
			TreeViewer viewer = (TreeViewer) event.getSource();
			for (Object element : list) {
				if (viewer.getExpandedState(element)) {
					viewer.collapseToLevel(element, 1);
				} else {
					viewer.expandToLevel(element, 1);
				}
			}
		}
	});

getExpandedState()で該当ノードが開かれているかどうかを判定し、開く場合はexpand、閉じる場合はcollapseを呼び出す。
(ちなみに、全体を開閉するexpandAll/collapseAllというメソッドもある)

もしくは、以下の様に書くことも出来る。

			for (Object element : list) {
				boolean expanded = viewer.getExpandedState(element);
				viewer.setExpandedState(element, !expanded);
			}

要素を選択する方法

プログラム内からツリーの要素を選択する方法。[2013-02-10]

import org.eclipse.jface.viewers.StructuredSelection;
		TreeViewer viewer = getTreeViewer();
		StructuredSelection selection = new StructuredSelection(element);
		viewer.setSelection(selection, true);

Eclipseプラグインへ戻る / Eclipseへ戻る / 技術メモへ戻る
メールの送信先:ひしだま