Невозможно нарисовать составной в OwnerDrawLabelProvider - PullRequest
3 голосов
/ 21 февраля 2010

У меня есть виджет TableViewer с одним столбцом, где каждая строка в содержимом таблицы представляет собой Composite с количеством дочерних виджетов. Столбец имеет поставщика меток, который является подклассом OwnerDrawLabelProvider. Предполагается, что поставщик меток отображает дочерние элементы Composite в ячейке таблицы, но при вызове paint() ничего не отображается.

Я нашел несколько примеров того, как рисовать простые или стилизованные текстовые элементы или примитивы, используя GC в Event объекте, переданном, но ничего при рисовании содержимого Composite в ячейке площадь.

Возможно ли это, и если да, что я делаю не так?

Вот код для создания таблицы:

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

Вот методы measure и paint для поставщика пользовательских меток, 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();
    }

1 Ответ

2 голосов
/ 22 февраля 2010

Я думаю, что OwnerDrawLabelProvider предназначен для использования, если вы хотите нарисовать свой собственный компонент с помощью GC. Если вы хотите отображать только обычный виджет SWT в таблице, вам, вероятно, следует использовать TableEditor и #setEditor (Control), чтобы установить элемент управления, который вы хотите отображать в ячейке таблицы.

...