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

Changing scroll bar color programmatically

我需要根据某些用户选择更改滚动条的颜色。 在典型的形式中,我有一个开关盒,我在哪里设置滚动条颜色使用:

@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 语句更改。样式属性也发生变化。

但是,应用到拇指的初始颜色为准!

可能是什么问题?

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

那不行。 getComponentStyle 将始终 return 一个副本,这是它应该的样子。否则,当您执行类似 getUnselectedStyle().setFgColor() 的操作时,您将更改所有组件的颜色。

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

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