S-JIS[2013-04-24] 変更履歴

Eclipseプラグイン JFace CheckboxTreeViewer

Eclipseプラグイン開発で扱うJFaceのCheckboxTreeViewerについて。

 

概要

CheckboxTreeViewerは、各要素の左端にチェックボックスを表示するツリー。


ラベルクリックによるチェック

チェックボックスをクリックするとチェックが付いたり外れたりするが、
デフォルトではラベル部分をクリックしても何も起こらない。
ラベルをクリックした際もチェックが付けられる方が便利なので、それを実装してみる。

import org.eclipse.jface.viewers.CheckboxTreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
	this.viewer = new CheckboxTreeViewer(pane, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
〜
	final Tree tree = viewer.getTree();
	tree.addMouseListener(new MouseAdapter() {
		@Override
		public void mouseDown(MouseEvent e) {
			Point point = new Point(e.x, e.y);
			TreeItem item = tree.getItem(point);
			if (item == null) {
				return;
			}
			if (item.getBounds().contains(point)) {
				boolean checked = !item.getChecked();
				item.setChecked(checked);
			}
		}
	});

Treeにマウスリスナーを登録し、クリックされた際にクリックされた要素(TreeItem)を取得し、
さらにその中でラベル部分がクリックされたことを判定してチェックを反転させている。

この辺りの動作はWindowsとLinuxでは異なる。
WindowsではMouseListenerの代わりにSelectionListenerを使っても同様の処理は行えるが、Linuxでは駄目だった。


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