TableViewerColumn にボタンを配置することは可能ですか? これを確認する投稿がいくつかありますが、実際に機能するコードは見つかりませんでした。DialogCellEditor についても読んだことがありますが、それを調べる必要がありますか?
よろしく、マーカス
TableViewerColumn にボタンを配置することは可能ですか? これを確認する投稿がいくつかありますが、実際に機能するコードは見つかりませんでした。DialogCellEditor についても読んだことがありますが、それを調べる必要がありますか?
よろしく、マーカス
これは一般的な問題のように思われるため、回避策を試しました。画像をラベルとして使用し、次のような編集サポートを追加します。
col = createTableViewerColumn(titles[10], bounds[10], 10);
col.setEditingSupport(new DeleteSupport(viewer));
col.setLabelProvider(new ColumnLabelProvider() {
@Override
public Image getImage(Object element) {
return new Image(ApplicationRunner.getApp().getShell()
.getDisplay(), "ressources/images/delete.png");
}
@Override
public String getText(Object element) {
return "";
}
});
DeleteSupport クラス (EditingSupport を拡張) では、canEdit() が false を返すようにする必要があるため、画像は選択できません。ただし、getValue() を使用することはできません。したがって、false を返す前に canEdit() で必要なことは何でも行います。これは、単純なプッシュ ボタンと同じ動作です。
DeleteSupport は次のようになります。
public class DeleteSupport extends EditingSupport {
private final TableViewer viewer;
public DeleteSupport(TableViewer viewer) {
super(viewer);
this.viewer = viewer;
}
@Override
protected CellEditor getCellEditor(Object element) {
return new TextCellEditor(viewer.getTable());
}
@Override
protected boolean canEdit(Object element) {
// if confirmed, try to delete the customer
if (MessageDialog.openConfirm( ApplicationRunner.getApp().getShell(),
"Confirm delete",
"Soll " + ((Customer) element).getFirstname()
+ " " + ((Customer) element).getLastname()
+ " be deleted? Cannot be undone!")) {
try {
CustomerDAO.getInstance().delete(((Customer) element).getId());
} catch (SQLException e) {
// TODO something
}
}
// reload anyways
try {
viewer.setInput(CustomerDAO.getInstance().getAll());
} catch (SQLException e) {
// TODO something else
}
viewer.refresh();
return false;
}
@Override
protected Object getValue(Object element) {
return "";
}
@Override
protected void setValue(Object element, Object value) {
}
}