return new ObjectReflectTableModel(columns, 1, methods, null) {
private static final long serialVersionUID = 1L;
@Override
public boolean isCellEditable(int row, int col) {
MasterItem model = (MasterItem) getObject(row);
// 疾患名カラムは HAND_CODE の時のみ編集可能
if (col == 1) {
return model != null && HAND_CODE.equals(model.getCode());
//エリアスカラムは modifier でなければ編集可能
} else if (col == 2) {
return model != null && (!model.getCode().startsWith(MODIFIER_CODE));
}
return false;
}
@Override
public void setValueAt(Object o, int row, int col) {
if (o == null) return;
String value = (String)o;
MasterItem model = (MasterItem) getObject(row);
if (col == 1) {
// 名前コラムに Object が入力されていた場合は HAND_CODE とする
if (!value.equals("")) {
// 登録されている MasterItem がなければ作成して加える
if (model == null) {
model = new MasterItem();
model.setName(value);
model.setCode(HAND_CODE);
addRow(model);
// 登録されている MasterItem があれば,HAND_CODE に変更する
} else {
model.setName(value);
model.setCode(HAND_CODE);
fireTableCellUpdated(row, col);
}
// これで StampModelEditor の呼び主の propertyChange が呼ばれる
checkState();
}
} else if (col == 2) {
// エリアスコラムは MasterItem の dummy を間借り
if (model != null) {
model.setDummy(value);
}
}
}
};
}