Невозможно нарисовать композит в владельце RadwarabelProvider

StackOverflow https://stackoverflow.com/questions/2304207

  •  21-09-2019
  •  | 
  •  

Вопрос

у меня есть 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();
    }
Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top