OwnerDrawLabelProvider以3D突出显示

时间:2015-01-24 18:59:16

标签: swt draw jface

我正在使用JFace的OwnerDrawLabelProvider类来绘制TableView的单元格。我有几个问题:

  1. 当我将鼠标悬停在单元格上方时,会突出显示3D,就好像它是一个带有边框的工具提示,有点像它漂浮在实际单元格上。

  2. 我需要同时实现多个任务:我正在实现行颜色的交替,同时我需要绘制可能包含文本和绘图的多行单元格内容。文本出现问题。如果我不使用SWT.DRAW_TRANSPARENT开关,则文本的背景与行的颜色不同(以编程方式交替);使用开关我可以实现文本的透明度,但是字母不是很清晰,而是它们会得到某种带红色的光环'围绕着他们,这破坏了外观。我正在使用SWT GC的抗锯齿选项来处理文本和绘图,但没有帮助。 我想听一些建议或看一些例子。谢谢!

    它发生在Windows 7上。

  3. 相关代码部分:

     @Override
    

    protected void measure(事件事件,对象元素)   {     Rectangle rectangle = new Rectangle(0,0,column.getColumn()。getWidth(),rowHeight);     event.setBounds(new Rectangle(event.x,event.y,rectangle.width,rectangle.height));   }

    @覆盖   abstract protected void paint(事件事件,Object元素);

    @覆盖   protected void erase(事件事件,对象元素)   {

    }

    在实现的paint()中:

    final Table table = viewer.getTable();
    Point measure = new Point(0, 0);
    PrioritiesForwardsDTO m = (PrioritiesForwardsDTO) element;
    table.setRedraw(false);
    int index = table.getTopIndex();
    while (index < table.getItemCount())
    {
      TableItem item = table.getItem(index);
    
      if (!abstractMultilineCellLabelProvider.isVisible(item))
      {
        return;
      }
      Color cx = null;
      boolean even = (index & 1) == 0;
      cx = getStripeColor(even);
    
      Rectangle bounds = event.getBounds();
      String firstline = (m.getSource() == null ? "" : m.getSource());
      String secondline = (m.getVendor() == null ? "" : m.getVendor());
      event.gc.setFont(boldFont);
      event.gc.setAntialias(SWT.ON);
      event.gc.setAdvanced(true);
      event.gc.setTextAntialias(SWT.ON);
      event.gc.setBackground(cx);
      event.gc.fillRectangle(bounds);
      event.gc.drawText(firstline, bounds.x + 1, bounds.y + 1, true);
      measure = event.gc.stringExtent(firstline);
      event.gc.setFont(smallBoldFont);
      event.gc.setAntialias(SWT.ON);
      event.gc.drawText(secondline, bounds.x + 1, bounds.y + measure.y + 4, true);
      item.setBackground(cx);
      table.setRedraw(true);
      index++;
    

    }

    以下是它的样子: Image of the question

0 个答案:

没有答案