2010-05-18 9 views
15

W .NET można osiągnąć coś takiego:Konwersja String do koloru w Javie

Color yellowColor = Color.FromName("yellow"); 

Czy istnieje sposób to zrobić w Javie bez konieczności uciekania się do refleksji?

PS: Nie proszę o alternatywne sposoby przechowywania/ładowania kolorów. Chcę tylko wiedzieć, gdzie to możliwe, czy nie.

Odpowiedz

25

Użyj odbicia, aby uzyskać dostęp do statycznego elementu klasy Color.

Color color; 
try { 
    Field field = Class.forName("java.awt.Color").getField("yellow"); 
    color = (Color)field.get(null); 
} catch (Exception e) { 
    color = null; // Not defined 
} 
+2

Jest to odbicie i jest to jedyne rozwiązanie, jakie mogę wymyślić. Każdy inny sposób wymagałby stworzenia mapy kolorów. –

+0

To jest refleksja, ale jest to mile widziane. Wydaje się, że jest to jedyny sposób, aby to zrobić ... Zastanawiam się, dlaczego wszystko w Javie musi być tak skomplikowane ... –

+0

@Evououred elysium: Po użyciu ruby ​​przez jakiś czas, nie lubię java, ponieważ trzeba odkrywać na nowo koło wiele razy. Możesz użyć groovy, umożliwia dostęp do pól po nazwie. –

1

Próbowałem coś takiego i to działało (przynajmniej dla JavaFX)

String color = "red"; 
Color c = Color.web(color); 
gc.setFill(color); 
gc.fillOval(10, 10, 50, 40); 
+0

Tak, jest to plik javafx.scene.paint.Color. – Line

0

Dlaczego nie uczynić niestandardowej klasy do tego? Zrobiłem to i działa dla mnie. UWAGA: Będziesz musiał dołączyć tę klasę do swojego pakietu.

import java.awt.Color; 

/** 
* A class to get the Color value from a string color name 
*/ 
public class MyColor { 
    private Color color; 

public MyColor(){ 
    color = Color.WHITE; 
    } 
/** 
* Get the color from a string name 
* 
* @param col name of the color 
* @return White if no color is given, otherwise the Color object 
*/ 
static Color getColor(String col) { 
    switch (col.toLowerCase()) { 
    case "black": 
     color = Color.BLACK; 
     break; 
    case "blue": 
     color = Color.BLUE; 
     break; 
    case "cyan": 
     color = Color.CYAN; 
     break; 
    case "darkgray": 
     color = Color.DARK_GRAY; 
     break; 
    case "gray": 
     color = Color.GRAY; 
     break; 
    case "green": 
     color = Color.GREEN; 
     break; 

    case "yellow": 
     color = Color.YELLOW; 
     break; 
    case "lightgray": 
     color = Color.LIGHT_GRAY; 
     break; 
    case "magneta": 
     color = Color.MAGENTA; 
     break; 
    case "orange": 
     color = Color.ORANGE; 
     break; 
    case "pink": 
     color = Color.PINK; 
     break; 
    case "red": 
     color = Color.RED; 
     break; 
    case "white": 
     color = Color.WHITE; 
     break; 
     } 
    return color; 
    } 
} 

W niektórych Container Właśnie nazwać jak ten

public JPanel createStatusBar(){ 
    JPanel statusBar = new JPanel(layoutManager); 
    statusBar.setBackgroundColr(MyColor.color("green")); 
    // and other properties 
    return statusBar; 

nadzieję, że to pomaga.