Button TableViewer列中的JFace按钮
是否可以在TableViewer列中设置按钮?有几篇文章证实了这一点,但我没有发现真正有效的代码。我也读过关于DialogCellEditor的文章,这就是要研究的吗 问候,,Button TableViewer列中的JFace按钮,button,jface,tableviewer,Button,Jface,Tableviewer,是否可以在TableViewer列中设置按钮?有几篇文章证实了这一点,但我没有发现真正有效的代码。我也读过关于DialogCellEditor的文章,这就是要研究的吗 问候,, 马库斯由于这似乎是一个常见问题,我尝试了一种解决方法。我使用图像作为标签并添加编辑支持,如下所示: col = createTableViewerColumn(titles[10], bounds[10], 10); col.setEditingSupport(new DeleteSupport(
马库斯由于这似乎是一个常见问题,我尝试了一种解决方法。我使用图像作为标签并添加编辑支持,如下所示:
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) {
}
}由于这似乎是一个常见问题,我尝试了一种解决方法。我使用图像作为标签并添加编辑支持,如下所示:
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) {
}
}您能回答自己的问题真是太好了。为了使这对其他人更有帮助,您还应该提供
DeleteSupport
:)的代码。您可以回答自己的问题,这很好。为了使这对其他人更有帮助,您还应该提供DeleteSupport
:)的代码