的油漆單元格背景我必須實現對我的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來繪製自定義選擇指示符(和樣式文本)。 –