Я думаю, что вы можете сделать это, используя владельца. Используйте этот фрагмент в качестве отправной точки и замените обработчик события EraseItem
следующим:
public void handleEvent( Event event ) {
event.detail &= ~SWT.HOT;
GC gc = event.gc;
Rectangle area = table.getClientArea();
/*
* If you wish to paint the selection beyond the end of
* last column, you must change the clipping region.
*/
int columnCount = table.getColumnCount();
if ( event.index == columnCount - 1 || columnCount == 0 ) {
int width = area.x + area.width - event.x;
if ( width > 0 ) {
Region region = new Region();
gc.getClipping(region);
region.add(event.x, event.y, width, event.height);
gc.setClipping(region);
region.dispose();
}
}
gc.setAdvanced(true);
if ( gc.getAdvanced() ) gc.setAlpha(127);
Rectangle rect = event.getBounds();
Color background = gc.getBackground();
gc.setBackground(display.getSystemColor(SWT.COLOR_RED));
gc.fillRectangle(0, rect.y, 500, rect.height);
// restore colors for subsequent drawing
gc.setBackground(background);
}
Должен работать на GTK (который использует оконный менеджер linux, используемый SWT) и с Trees
, но не пробовал.
Поскольку рисование владельца дорого, я настоятельно рекомендую добавить такой обработчик событий для GTK:
if(SWT.getPlatform().equals("gtk")){ ... }
Но весь смысл SWT в том, чтобы иметь собственный рисунок. Это улучшает восприятие вашего программного обеспечения пользователем, потому что пользователи чувствуют себя «как дома». Может быть, вы можете разработать способ, при котором вам не нужно убирать альтернативный фон для пользователей GTK.