2010-04-29 7 views
-1

J'ai une chaîne qui stocke le nom d'une couleur. Grâce à l'aide de cette variable, j'ai besoin de changer le fond du panneau. Comment ceci peut être fait???changer de couleur de panneau

+0

Le nombre de noms de couleurs avec lesquels vous travaillez est-il fini? – Pops

+0

oui. mais le problème est qu'il existe de nombreux programmes liés les uns aux autres, et une fois que la couleur est changée dans une forme, la même couleur doit être utilisée dans l'autre forme également – user161004

Répondre

2

Créer une carte qui contient le nom de chaîne de la couleur et l'objet Couleur réel.

Edit:

deux autres seulement remarqués réponses suggèrent d'utiliser la méthode getColor (...). Cela ne fonctionne pas seulement magiquement et vous devez définir la couleur dans les propriétés du système. Je n'ai jamais utilisé les propriétés du système, mais je crois que vous devez les définir lorsque vous démarrez la JVM.

+0

Pouvez-vous montrer du code? –

+0

+1 pour la réponse de la carte - puisqu'il existe un ensemble fini (d'après un commentaire de l'OP), je recommande fortement de suivre ce mécanisme. Cela vous permet de changer les couleurs (comme mentionné par l'OP) et de recevoir cette modification par d'autres une fois que le changement a eu lieu, c'est-à-dire la prochaine fois qu'ils demandent cette couleur. – aperkins

1

Si les couleurs ne vont être ceux qui supports java, vous pourriez faire quelque chose comme ce qui suit:

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; 
} 

Quelques notes:

  1. Il utilise la réflexion, il sera être plus lent (bien que vous pourriez, techniquement l'utiliser pour faire une carte couleur au démarrage de l'application et juste référence que).
  2. Il serait beaucoup plus logique de faire une carte de couleur comme mentionné par d'autres personnes ci-dessus.

  3. Le mieux serait si les différents systèmes vous ont envoyé valeurs réelles - dire les valeurs rgb dans int ou 0,0-1,0 double format. Puis vous pouvez toujours leur donner la réponse appropriée .

Ma recommandation, si vous devez utiliser le nom de la couleur, serait qu'ils vous donnent un ensemble de noms que vous devez prendre en charge, et vous avez une condition d'erreur - soit une couleur par défaut, null, ou lancer une exception .

Espérons que cela aide.