Невозможно нарисовать композит в владельце RadwarabelProvider
-
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), чтобы установить элемент управления, который вы хотите показать в таблице.