代码之家  ›  专栏  ›  技术社区  ›  Paul Schifferer

无法在OwnerDrawLabelProvider中绘制复合

  •  3
  • Paul Schifferer  · 技术社区  · 15 年前

    我有一个 TableViewer 具有单个列的小部件,其中表内容中的每一行都是 Composite OwnerDrawLabelProvider . 标签提供程序应该呈现 表单元格中的子项,但当 paint() 调用时,不会呈现任何内容。

    GC Event 对象传入,但在绘制 混合成的

    这可能吗?如果可能,我做错了什么?

    以下是创建表的代码:

        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 回复  |  直到 15 年前
        1
  •  2
  •   Kire Haglin    15 年前

    我认为OwnerDrawLabelProvider应该用于使用GC绘制自己的组件。如果您只想在表中呈现一个普通的SWT小部件,您可能应该使用TableEditor和#setEditor(Control)来设置要在表单元格中显示的控件。