以编程方式更改滚动条颜色
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()
表格。
另一种方法是派生可滚动组件并自己绘制滚动条,或者完全隐藏滚动条并使用玻璃板或类似工具自行绘制。
我需要根据某些用户选择更改滚动条的颜色。 在典型的形式中,我有一个开关盒,我在哪里设置滚动条颜色使用:
@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()
表格。
另一种方法是派生可滚动组件并自己绘制滚动条,或者完全隐藏滚动条并使用玻璃板或类似工具自行绘制。