Domanda

Ho un widget di TableViewer con una sola colonna, dove ogni riga il contenuto della tabella è un Composite con una serie di widget figlio. La colonna ha un fornitore di etichetta che è una sottoclasse di OwnerDrawLabelProvider. Il provider etichetta è supposto per rendere i bambini Composite nella cella di una tabella, ma quando paint() si chiama, nulla è reso.

ho trovato una serie di esempi su come disegnare elementi semplici o stile di testo o primitive che utilizzano il GC nell'oggetto Event passata, ma niente a disegnare il contenuto di una Composite nella zona della cella.

Questo è possibile, e se sì, che cosa sto facendo male?

Ecco il codice per creare la tabella:

    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());

Questi sono i metodi measure e paint per il provider di etichetta personalizzata, 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();
    }
È stato utile?

Soluzione

Credo OwnerDrawLabelProvider è pensato per essere utilizzato se si vuole disegnare il proprio componente con il GC. Se si desidera solo rendere un normale widget di SWT in una tabella, probabilmente si dovrebbe usare TableEditor e #setEditor (Control) per impostare il controllo che si desidera visualizzare nella cella della tabella.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top