的油漆单元格背景我必须实现对我的Table
的选择,并且为此需要将单元格的背景用蓝色绘制(并且稍后可能前景为白色,但这对未来是个问题)。表格
天真的方法是只使用这样的漆事件:
table.addListener(SWT.PaintItem, event -> {
final boolean selection = // calulate somehow;
if (selection) {
event.gc.setForeground(this.table.getDisplay().getSystemColor(SWT.COLOR_LIST_SELECTION));
Rectangle bounds = table.getItem(new Point(event.x, event.y)).getBounds();
event.gc.fillRectangle(event.x, event.y, bounds.width, bounds.height);
}
});
但是,这种油漆在小区的一切,我需要画表自己的全部内容。这不是我现在想要做的。
然后我试图使用TableItem#setBackground(Color)
,它获取由预制的选择重写和悬停颜色,即使他们禁用这样的:
table.addListener(SWT.EraseItem, event -> {
event.detail &= ~SWT.SELECTED;
event.detail &= ~SWT.HOT;
event.detail &= ~SWT.FOCUSED;
});
从而显示被选中或悬停的行由OS在白色。
我试过EraseItem
和MeasureItem
以及希望找到一个在单元被绘制之前抛出的事件,所以我只能绘制背景。但EraseItem
涂料在一切和MeasureItem
绘画不会做任何事情。
有什么方法可以绘制单元格的背景,而无需手动绘制前景或被表格的内置选择覆盖?
这只是'Table'或者你在使用'TableViewer' - 它支持一个实现'IColorProvider'的标签提供者。 –
@ greg-449它是一个'TableViewer',但表格和列上的标签提供者都会被选择和悬停覆盖。 –
对于TableViewer,我使用扩展的StyledCellLabelProvider来绘制自定义选择指示符(和样式文本)。 –