2010-04-29 118 views
-1

我有一个字符串,它存储的颜色的名称。通过这个变量的帮助,我需要更改面板背景。如何做呢???更改面板颜色

+0

您使用的颜色名称数是否有限? – Pops 2010-04-29 19:40:52

+0

是的。但问题是有很多程序彼此链接,一旦颜色改变了一种形式,相同的颜色将被用于其他形式也 – user161004 2010-04-29 19:51:43

回答

2

创建包含颜色的String名称和实际Color对象的映射。

编辑:

只注意到其他两个答案使用的getColor(...)方法建议。这不仅仅是神奇的工作,而且你需要在系统属性中定义颜色。我从来没有使用系统属性,但我相信你需要在启动JVM时设置它们。

+0

你可以显示一些代码? – 2010-04-29 20:02:57

+0

+1对于地图响应 - 因为有一个有限集合(根据OP的评论),我强烈建议遵循这个机制。这使您可以更改颜色(如OP所述),并在更改发生时让其他人接收该更改 - 即下次他们请求该颜色时。 – aperkins 2010-04-29 20:16:24

1

如果颜色只打算是Java支持,你可以不喜欢下面的那些:

private Color getColorByName(String colorName) { 

    Field[] colorFields = Color.class.getDeclaredFields(); 
    for (Field field : colorFields) { 
     if (field.getName().equals(colorName.toUpper())) { 
      //check that this is in fact a static field, 
      //to make sure it is one of the colors you are looking for 
      int modifiers = field.getModifiers(); 
      if ((Modifiers.STATIC & modifiers != 0) 
        && (Modifiers.PUBLIC & modifiers != 0)) { 
       try{ 
        return (Color)field.getValue(null); 
       } catch (FieldNotFoundException ex) { 
        //Maybe put some additional handling in here if you need it 
       } 
      } 
     } 
    } 
    //or return a default color 
    return null; 
} 

的几个注意事项:

  1. 本使用反射,所以它会 会更慢(尽管你可以, 在技术上使用它来制作颜色 地图在应用程序启动 并只参考)。
  2. 如上面其他 人所述,制作 彩色地图会更有意义。

  3. 最好是 如果不同的系统发送您 实际值 - 在 int或0.0-1.0双格式表示RGB值。那么你可以持续给他们 适当的回应。

我的建议,如果一定要使用的颜色名称,将是他们给你一组,你必须支持的名字,和你有一个错误的条件 - 无论是默认的颜色,null或抛出一个异常。

希望这会有所帮助。