如何通过更改JComponents
变量Color
,以编程方式更新N c
(背景和前景)的颜色?
示例:
我有10 JButton
和5 JCheckbox
。
我有变量:
Color mainColor = Color.RED;
我将所有背景和前景设置为mainColor
。
现在,如果我希望所有这些都是蓝色的,mainColor = Color.BLUE
将不起作用。
通常我会做mainColor.setRgb(0,0,255)
之类的事情,但无论出于何种原因,Color
都不允许这样做。
那我该怎么办?其他解决方法也很受欢迎。 这些组件分布在很多面板和框架上,有些是动态显示的,所以我不想保留一个列表。 同样不是所有这些都需要绘制前景和背景。
答案 0 :(得分:0)
您必须重置所有JComponents的颜色。为简单起见,您可以创建一个帮助您的辅助方法。
void changeMainColor(Color c){
this.mainColor = c;
for (JComponents jc : this.myComponentsList){
jc.setForeground(c);
jc.setBackground(c);
}
}
编辑
如果您不想手动保留组件列表,请使用Observer模式:
要获得更大的抽象,请使用Publisher / Subscriber模式。每当你更改主要颜色时,你就会发布"发布"事实。所有注册为"订户的组件"那个事件,然后将能够使用事件中提供的信息(颜色)做他们想做的事情(改变背景等)。
我建议在四本书(设计模式:可重复使用的面向对象软件的元素)中阅读它们,但下面有一些快速参考:
https://sourcemaking.com/design_patterns/observer和 https://abdulapopoola.com/2013/03/12/design-patterns-pub-sub-explained/
答案 1 :(得分:0)
丑陋的样式:子类java.awt.Color,委托给一个真实的Color实例,并为委托提供一个mutator。