我正在使用JFace的OwnerDrawLabelProvider类来绘制TableView的单元格。我有几个问题:
当我将鼠标悬停在单元格上方时,会突出显示3D,就好像它是一个带有边框的工具提示,有点像它漂浮在实际单元格上。
我需要同时实现多个任务:我正在实现行颜色的交替,同时我需要绘制可能包含文本和绘图的多行单元格内容。文本出现问题。如果我不使用SWT.DRAW_TRANSPARENT开关,则文本的背景与行的颜色不同(以编程方式交替);使用开关我可以实现文本的透明度,但是字母不是很清晰,而是它们会得到某种带红色的光环'围绕着他们,这破坏了外观。我正在使用SWT GC的抗锯齿选项来处理文本和绘图,但没有帮助。 我想听一些建议或看一些例子。谢谢!
它发生在Windows 7上。
相关代码部分:
@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