2010-09-22 7 views
7

Sto cercando di ottenere i colori per nome e mi sono imbattuto in Converting a String to Color in Java, che suggerisce di utilizzare java.awt.getColor.Come funziona java.awt.Color.getColor (String colorName)?

Non riesco a capire cosa passare come una stringa però. I seguenti

System.out.println(java.awt.Color.getColor("black", Color.red)); 

stampe su

java.awt.Color [r = 255, g = 0, b = 0]

cioè sta con il colore predefinito in Là.

L'ho messo in una casella di testo e ho provato le maiuscole alternative ecc. I documenti non sono molto utili qui. Qualcuno può suggerire quali stringhe magiche inserire?

+0

Se leggi la domanda a cui ti sei collegato più attentamente, vedrai che Color.getColor non è una scelta adatta. La versione di riflessione in questa domanda sembra molto più appropriata. – spender

+0

OK - L'ho letto più volte e le risposte implicano che posso ottenere colori per nome usando questo metodo, che è molto più conciso e naturale dell'uso del riflesso. È il caso che la risposta di bwawok è sbagliata e non ci sono proprietà di sistema impostate per il set di colori predefinito? –

+0

Sì, è così. La risposta è sbagliata. –

risposta

11

La risposta non accettata utilizza Color.getColor. Questo metodo legge dalle proprietà del sistema che possono o non possono essere presenti. Non dovresti usare questo metodo.

Invece, è necessario utilizzare il metodo di riflessione a monte per trovare il membro statico della classe Color. In alternativa, oppure è necessario importare il proprio database dei colori che associa i nomi delle stringhe ai valori RGB.

Color color; 
try { 
    Field field = Color.class.getField("yellow"); 
    color = (Color)field.get(null); 
} catch (Exception e) { 
    color = null; // Not defined 
} 
+0

Ciao Eric, tu dici: "Non dovresti usare questo metodo." ... Ma perché? Attualmente sto creando un ListCellRenderer personalizzato. E voglio che usi i colori predefiniti per un oggetto selezionato. I tuoi suggerimenti su come non usare questo metodo mi sembrano strani. – exhuma

+0

Capisco perché sei confuso. La risposta non accettata nella domanda collegata dall'OP è stata rimossa. Utilizzare il metodo nella risposta accettata, per i motivi che ho indicato in questa risposta. –

Problemi correlati