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)を取得し、
さらにその中で列がクリックされたことを判定してチェックを反転させている。
チェックボックス自体をクリックしたときにもマウスイベントは発生するので、列のチェックは必須。