EditingSupportクラスは、編集を行うにあたって、編集を行うか否か、どのように編集するか、 編集結果からセルにどのような値を入れるかについてサポートします。
このクラスを使用するには、サブクラスを作成して、抽象メソッドをすべて実装しなければなりません。 その他の非抽象メソッドは、特に意識しなくても問題ありません。
EditingSupport {
protected abstract boolean canEdit(Object element);
protected abstract CellEditor getCellEditor(Object element);
protected abstract Object getValue(Object element);
protected abstract void saveValue(Object element, Object value);
}
canEditメソッドは、このカラムが編集可能であるかどうかを判断します。 編集を許す場合はtrueを、許さない場合はfalseを返します。
getCellEditorメソッドは、 CheckboxCellEditorオブジェクト、 ComboBoxCellEditorオブジェクト、 DialogCellEditorオブジェクト、 TextCellEditorオブジェクトのいずれかを作成して返します。
getValueメソッドは、エディタにセットする値を返します。 ここで返したObjectは、getCellEditorメソッドで返したCellEditorオブジェクトのdoSetValue(Object value)メソッドに渡されます。 TextCellEditorクラスでは、ここに指定できるのはStringオブジェクトのみです。 ComboBoxCellEditorクラスでは、ここに指定できるのはIntegerオブジェクトのみです。
saveValueメソッドでは、エディタによって編集された情報を、モデル(Model)に反映させます。 反映させた後、viewerのrefreshメソッドを呼び出さないと、テーブルの内容が更新されないので、忘れないように呼び出します。
EditingSupportクラスを継承したクラスのサンプルを示します。 しかしながらこのサンプルは、実行させることができず、テストも実施していないので、あくまでもイメージをつかむために参照して下さい。 ここで登場するPersonalDataクラスは、自作クラスとして作成し、(Viewer#setInputメソッドにて)Modelに指定されているものとします。
public class MyEditingSupport extends EditingSupport {
protected boolean canEdit(Object element) {
return true;
}
protected CellEditor getCellEditor(Object element) {
// parent is a composite
return new TextCellEditor(parent);
}
protected Object getValue(Object element) {
return String.valueOf(((PersonalData)element).getAge());
}
protected void saveValue(Object element, Object value) {
PersonalData personalData = (PersonalData)element;
personalData.setAge((String)value);
}
}
実際にEditingSupportクラスを使用したプログラムのサンプルは、こちらにあります。