以编程方式更改滚动条颜色

时间:2015-01-07 11:37:58

标签: codenameone

我需要根据一些用户选择更改滚动条的颜色。 在一个典型的形式,我有切换案例我在哪里设置滚动条颜色:

@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());
}

首次正确挑选颜色代码会发生什么。 当再次调用此表单时,使用不同的用户选择,颜色代码值将根据switch语句更改。样式属性也会发生变化。

然而,应用于拇指的初始颜色占优势!

enter image description here

enter image description here

可能是什么问题?

我试过f.refreshTheme();但这似乎不起作用。它只是支持第一个应用的颜色

1 个答案:

答案 0 :(得分:1)

那不会奏效。 getComponentStyle将始终返回一个应该是它的副本。否则当您执行getUnselectedStyle().setFgColor()之类的操作时,您将更改所有组件的颜色。

一种方法是更新主题,你可以定义另一个主题,只设置滚动的颜色,然后使用UIManager的addThemeProps应用它,然后在窗体上调用refreshTheme()

另一种方法是派生可滚动组件并自己绘制滚动条或完全隐藏滚动条并使用玻璃板或类似物自行绘制。