Pregunta

tengo un TableViewer widget con una sola columna, donde cada fila en el contenido de la tabla es un Composite con varios widgets infantiles. La columna tiene un proveedor de etiqueta que es una subclase de OwnerDrawLabelProvider. Se supone que el proveedor de la etiqueta representa el Composite Niños en la celda de la mesa, pero cuando paint() se llama, nada se representa.

He encontrado una serie de ejemplos sobre cómo dibujar elementos de texto simples o de estilo, o primitivas utilizando el GC en el Event el objeto pasó, pero nada al dibujar el contenido de un Composite en el área de la celda.

¿Es esto posible, y si es así, ¿qué estoy haciendo mal?

Aquí está el código para crear la tabla:

    viewer = new TableViewer(container, SWT.NONE);
    final Table table = viewer.getTable();

    TableViewerColumn viewerColumn = new TableViewerColumn(viewer, SWT.LEFT);
    TableColumn tableColumn = viewerColumn.getColumn();
    tableColumn.setText(Messages.getString("column.header.name"));
    tableColumn.setResizable(true);
    tableColumn.setMoveable(false);
    tableColumn.setWidth(500);
    viewerColumn.setLabelProvider(new CompositeLabelProvider());

Aquí están los measure y paint Métodos para el proveedor de etiquetas personalizadas, CompositeLabelProvider:

    @Override
    protected void measure(Event event, Object element) {

        CompositeTableItem row = rowMap.get(element);
        Composite contents = row.getContents(viewer.getTable().getParent());
        Point size = contents.computeSize(SWT.DEFAULT, SWT.DEFAULT);
        event.setBounds(new Rectangle(event.x, event.y, size.x, size.y));
    }

    @Override
    protected void paint(Event event, Object element) {

        CompositeTableItem row = rowMap.get(element);
        Composite contents = row.getContents(viewer.getTable().getParent());

        contents.redraw(event.getBounds().x, event.getBounds().y, event.getBounds().width, event.getBounds().height, true);

        contents.update();
    }
¿Fue útil?

Solución

Creo que el propietario de propietario se debe usar si desea dibujar su propio componente usando el GC. Si solo desea renderizar un widget SWT normal en una tabla, probablemente debería usar TableEditor y #SetEditor (control) para establecer el control que desea mostrar en la celda de la tabla.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top