#topicpath
----
Excelシートのような編集機能がついたテーブル(以下、セルエディタ)を作成したいと思います。といっても今のところわかったのはTableViewerに編集機能をつけただけで、全件選択のやり方などがわかったわけではないのであしからず。

***概要 [#cc9ee7f9]
セルエディタの実装ですが、具体的には org.eclipse.jface.viewers.TableViewerを修飾していくことで実装します。モデルの設定は setContentProvider、表示の設定はsetLabelProviderと同じ感じで、エディタの設定は
 TableViewer#setCellModifier(ICellModifier)
というメソッドを用います。

手順としては
+ TableViewer#.setColumnProperties(String[]); でカラムごとのプロパティを設定
+ TableViewer#setCellEditors(CellEditor[]); でカラムごとのセルエディタを設定((CellEditorの実装はEclipseから提供される))
+ TableViewer#setCellModifier(ICellModifier); で編集時の仕様を決める(?)

となります。

以下、TableViewerのインスタンスをviewerと仮定します。


***TableViewer#.setColumnProperties(String[]); [#w5ed8d76]
たとえば
 String[] properties = new String[] { "id", "name", "value" };
 viewer.setColumnProperties(properties);
などとして各カラムのプロパティを設定します。プロパティはICellModifierの実装で使用します。


***TableViewer#setCellEditors(CellEditor[]); [#n4ed3851]
たとえば
 CellEditor[] editors = new CellEditor[] {
  new TextCellEditor(viewer.getTable()),
  new TextCellEditor(viewer.getTable()),
  new TextCellEditor(viewer.getTable()) };
 viewer.setCellEditors(editors);
として、各カラムのエディタを設定します。TextCellEditorはそのカラム上で編集するエディタです。そのほか
 CheckboxCellEditor チェックボックスのエディタ
 ColorCellEditor カラーダイアログを出すエディタ
 ComboBoxCellEditor プルダウンを出すエディタ
などがあるみたいです。


***TableViewer#setCellModifier(ICellModifier); [#cdb3888b]
ここまでで表示仕様が決まったので、あとはセルをクリックしたとき(編集の開始)、セルから出たとき(編集が終了)の仕様を実装します。実装は
 org.eclipse.jface.viewers.ICellModifier
の実装クラスで指定します。
実装するメソッドは
 public Object getValue(Object element, String property)  編集開始
 public void modify(Object element, String property, Object value) 編集終了
 public boolean canModify(Object element, String property) 編集可能かを返すメソッド
です。


まずgetValue(Object element, String property) ですがelementはTableViewerのモデルオブジェクト、propertyは前述のプロパティです。セルのクリック時にエディタに渡したいデータを設定します。



次にmodify(Object element, String property, Object value) ですが、elementは選択していた行のTableItem、propertyはプロパティ、valueはエディタで編集した結果のオブジェクトです。


***関連記事 [#edb13ab0]
-[[テーブル・ビューワを使用する:http://www13.plala.or.jp/observe/JFace/jfaceViewer3.html]]

----
この記事は
#vote(おもしろかった,そうでもない)

#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS