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

Eclipseプラグイン JFace CheckboxTableViewer

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


概要

CheckboxTableViewerは、各行の左端にチェックボックスを表示するテーブル。


行クリックによるチェック

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

import org.eclipse.jface.viewers.CheckboxTableViewer;
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.Table;
import org.eclipse.swt.widgets.TableItem;
	this.viewer = CheckboxTableViewer.newCheckList(pane, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.FULL_SELECTION);
〜
	final Table table = viewer.getTable();
	table.addMouseListener(new MouseAdapter() {
		@Override
		public void mouseDown(MouseEvent e) {
			Point point = new Point(e.x, e.y);
			TableItem item = table.getItem(point);
			if (item == null) {
				return;
			}
			int columns = table.getColumnCount();
			for (int i = 0; i < columns; i++) {
				if (item.getBounds(i).contains(point)) {
					boolean checked = !item.getChecked();
					item.setChecked(checked);
					break;
				}
			}
		}
	});

Tableにマウスリスナーを登録し、クリックされた際にクリックされた行(TableItem)を取得し、
さらにその中で列がクリックされたことを判定してチェックを反転させている。

チェックボックス自体をクリックしたときにもマウスイベントは発生するので、列のチェックは必須。


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