Botón JFace en TableViewerColumn
Frecuentes
Visto 646 veces
1
¿Es posible tener un botón en una TableViewerColumn? Hay varias publicaciones que confirman esto, pero no he encontrado ningún código que realmente funcione. También he leído sobre un DialogCellEditor, ¿es eso lo que debo investigar?
Saludos, Marcus
1 Respuestas
1
Como esto parece ser un problema común, he intentado una solución. Uso una imagen como etiqueta y agrego soporte de edición así:
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 "";
}
});
En la clase DeleteSupport (que amplía EditingSupport), debe permitir que canEdit() devuelva falso, por lo que la imagen no se puede seleccionar. Pero entonces, no puedes trabajar con getValue(). Entonces, hago lo que tengo que hacer en canEdit() ANTES de devolver falso. Ese es el mismo comportamiento que tendría un simple botón pulsador.
El DeleteSupport se ve así:
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) {
}
}
Respondido 27 ago 12, 16:08
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas button jface tableviewer or haz tu propia pregunta.
Es genial que puedas responder tu propia pregunta. Para que esto sea más útil para los demás, también debe proporcionar el código de la
DeleteSupport
:) - base