问题
In a elipse-rcp application I am setting the background color for a row in a jface table but I don't want the selection to change this color. I want to be able to specify the color change for a selected row.
回答1:
According to this thread, for JFace Viewers
(ListViewer
, Table
, Tree
) by means of using EraseItem
and MeasureItem
events
General principle detailed in the article "Custom Drawing Table and Tree Items"
SWT.EraseItem
: allows a client to custom draw a cell's background and/or selection, and to influence whether the cell's foreground should be drawn

回答2:
table.addListener(SWT.EraseItem, new Listener() {
public void handleEvent(Event event) {
event.detail &= ~SWT.HOT;
if ((event.detail & SWT.SELECTED) == 0) return; /// item not selected
Table table =(Table)event.widget;
TableItem item =(TableItem)event.item;
int clientWidth = table.getClientArea().width;
GC gc = event.gc;
Color oldForeground = gc.getForeground();
Color oldBackground = gc.getBackground();
gc.setBackground(colorBackground);
gc.setForeground(colorForeground);
gc.fillRectangle(0, event.y, clientWidth, event.height);
gc.setForeground(oldForeground);
gc.setBackground(oldBackground);
event.detail &= ~SWT.SELECTED;
}
});
来源:https://stackoverflow.com/questions/911834/how-do-i-change-the-background-selection-color-for-a-jface-table