2015-01-07 3 views
0

У меня есть требование изменить цвет полосы прокрутки на основе определенного пользовательского выбора. В типичной форме, у меня есть переключатель случай, когда я устанавливаю цвет полосы прокрутки с помощью:Изменение цвета полосы прокрутки программно

@Override 
protected void beforeTopic(final Form f) { 
    int scrollColor=0x000000; 
    switch(userSelectedTopic) 
    { 
     case 1: 
     scrollColor=0x59be8a; 
     break; 
     case 2: 
    scrollColor = 0xff3333; 
     break; 
     . 
     . 
     . 

    } 

    // setting color to scroll thumb 
    Style s = UIManager.getInstance().getComponentStyle("ScrollThumb"); 
    System.out.println(scrollColor); 
    s.setFgColor(scrollColor); 
    s.setBgColor(scrollColor); 
    s.setBgTransparency(255); 
    UIManager.getInstance().setComponentStyle("ScrollThumb", s); 
    s = UIManager.getInstance().getComponentStyle("ScrollThumb"); 
    System.out.println("-->>"+s.getFgColor()); 
} 

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

Однако первоначальный цвет, применяемый к пальцу, преобладает!

enter image description here

enter image description here

Что может быть проблема?

Я пробовал f.refreshTheme(); но это, похоже, не работает. Он просто поддерживает первый нанесенный цвет

ответ

0

Это не сработает. getComponentStyle всегда будет возвращать копию, которая так и должна быть. В противном случае, когда вы сделаете что-то вроде getUnselectedStyle().setFgColor(), вы измените цвет всех компонентов.

Один из способов сделать это, чтобы обновить тему, вы можете определить другую тему, которая просто устанавливает цвет прокрутки, а затем применить его с помощью UIManager, а затем вызывать refreshTheme() на форме.

Альтернатива заключается в том, чтобы вывести прокручиваемый компонент и нарисовать прокрутку самостоятельно или полностью скрыть прокрутку и нарисовать ее самостоятельно, используя стеклопакет или что-то в этом роде.