【问题标题】:Swing: keeping reference to Color in componentsSwing:在组件中保持对颜色的引用
【发布时间】:2017-08-07 18:33:38
【问题描述】:

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

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

Color mainColor = Color.RED; 

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

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

【问题讨论】:

    标签: java swing user-interface colors


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您必须重置所有 JComponent 的颜色。为简单起见,您可以创建一个辅助方法来为您完成这项工作。

      void changeMainColor(Color c){
          this.mainColor = c;
          for (JComponents jc : this.myComponentsList){
              jc.setForeground(c);
              jc.setBackground(c);
          }
      }
      

      编辑

      如果您不想手动保留组件列表,请使用观察者模式:

      要获得更大的抽象,请使用发布者/订阅者模式。每次更改主要颜色时,您都会“发布”事实。所有注册为该事件的“订阅者”的组件将能够使用事件中提供的信息(颜色)来做他们想做的事情(改变背景等)。

      我建议在四本书(设计模式:可重用的面向对象软件的元素)中阅读它们,但下面是一些快速参考:

      https://sourcemaking.com/design_patterns/observerhttps://abdulapopoola.com/2013/03/12/design-patterns-pub-sub-explained/

      【讨论】:

      • 谢谢,但请阅读整个问题。我说我正在寻找一种解决方法。在我的具体情况下,我不能保留“myCompontensList”。也不是所有人都需要 setForeground 和 setBackground
      猜你喜欢
      • 1970-01-01
      • 2014-07-25
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-01
      相关资源
      最近更新 更多