Swing:在组件中保持对Color的引用

时间:2017-03-16 14:14:00

标签: java swing user-interface colors

如何通过更改JComponents变量Color,以编程方式更新N c(背景和前景)的颜色? 示例:

我有10 JButton和5 JCheckbox。 我有变量:

Color mainColor = Color.RED; 

我将所有背景和前景设置为mainColor。 现在,如果我希望所有这些都是蓝色的,mainColor = Color.BLUE将不起作用。 通常我会做mainColor.setRgb(0,0,255)之类的事情,但无论出于何种原因,Color都不允许这样做。

那我该怎么办?其他解决方法也很受欢迎。 这些组件分布在很多面板和框架上,有些是动态显示的,所以我不想保留一个列表。 同样不是所有这些都需要绘制前景和背景。

2 个答案:

答案 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/observerhttps://abdulapopoola.com/2013/03/12/design-patterns-pub-sub-explained/

答案 1 :(得分:0)

丑陋的样式:子类java.awt.Color,委托给一个真实的Color实例,并为委托提供一个mutator。