2014-01-16 2 views
1

У меня есть таблица, и я использую свой собственный LabelProvider для отображения цветов фона и переднего плана.Ячейка таблицы SWT переднего плана по выбору

От this Я получил, что я не могу изменить цвет фона выбора. Поэтому я хотел бы иметь возможность изменять цвет переднего плана текста при выборе. Однако я понятия не имею, как бы я мог определить, выбрана ли определенная строка, чтобы я мог использовать другой цвет переднего плана.

Любая помощь будет принята с благодарностью, я не слишком разбираюсь в swt.

EDIT: Для всех, кто ищет это то, что я сделал

public static void attachListenerIfWin7(Table table) 
{ 
    if (System.getProperty("os.name").startsWith("Windows") && System.getProperty("os.version").contains("6.1")) 
    { 
     table.addListener(SWT.EraseItem, new Listener() 
     { 
      public void handleEvent(Event event) 
      { 
       event.detail &= ~SWT.HOT; 
       if (event.detail != 24 && event.detail != 22 && event.detail != 18) 
        return; 
       int clientWidth = ((Composite) event.widget).getClientArea().width; 
       GC gc = event.gc; 
       Color oldForeground = gc.getForeground(); 
       Color oldBackground = gc.getBackground(); 
// hover 
       if (event.detail == 24) 
       { 
        gc.setBackground(new Color(event.display, new RGB(115, 115, 115))); 
        gc.setForeground(new Color(event.display, new RGB(115, 115, 115))); 
        gc.fillRectangle(0, event.y, clientWidth, event.height); 
       } 
// selected 
       else if (event.detail == 22) 
       { 
        gc.setBackground(new Color(event.display, new RGB(37, 37, 37))); 
        gc.setForeground(new Color(event.display, new RGB(105, 105, 105))); 
        gc.fillGradientRectangle(0, event.y, clientWidth, event.height, true); 
       } 
// selected but out of focus 
       else if (event.detail == 18) 
       { 
        gc.setBackground(new Color(event.display, new RGB(57, 57, 57))); 
        gc.setForeground(new Color(event.display, new RGB(135, 135, 135))); 
        gc.fillGradientRectangle(0, event.y, clientWidth, event.height, true); 
       } 
       gc.setForeground(oldForeground); 
       gc.setBackground(oldBackground); 
       event.detail &= ~SWT.SELECTED; 
      } 
     }); 
    } 
} 

ответ

2

Вот пример кода для установки фона выбора на SWT Table/Элементы дерева

table.addListener(SWT.EraseItem, new Listener() { 
    public void handleEvent(Event event) { 
     event.detail &= ~SWT.HOT; 
     if ((event.detail & SWT.SELECTED) == 0) 
      return; 
     int clientWidth = ((Composite)event.widget).getClientArea().width; 
     GC gc = event.gc; 
     Color oldForeground = gc.getForeground(); 
     Color oldBackground = gc.getBackground(); 
     gc.setBackground(event.display.getColor(SWT.COLOR_YELLOW)); 
     gc.setForeground(event.display.getColor(SWT.COLOR_BLUE)); 
     gc.fillGradientRectangle(0, event.y, clientWidth, event.height, true); 
     gc.setForeground(oldForeground); 
     gc.setBackground(oldBackground); 
     event.detail &= ~SWT.SELECTED; 
    } 
    }); 
+0

Кроме того, если вы не возражаете, я спрашиваю , Как я могу предотвратить изменение цвета наведения? – Quillion

Смежные вопросы