2010-04-29 77 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或拋出一個異常。

希望這會有所幫助。