2014-01-24 30 views
2

好顏色類型,所以我敢肯定,這是非常簡單的,但在這裏不用什麼:調用從字符串

所以說,我在這裏調用方法主人,顏色是其中的一個參數:

master("RED"); 

下面是主要方法:

public static void master(String color) { 
    g.setColor(Color.color) 
} 

不顧g.SetColor,從你可能沒有一個類的,問題是,當我打電話的「字符串值紅色「我打算將顏色設置爲紅色。否則,我就不得不手動做這樣的:

g.setColor(Color.RED); 

我只是困惑,爲什麼JAVA是不能識別顏色值當我打電話的顏色字符串。

+0

你的方法定義應該接受,你想傳遞,反之亦然'公共靜態無效主(串色)的參數{ }' –

+0

我編輯了這個問題。在完成之前意外發布。 – Chief120

+0

從0-255的RGB範圍內有16,777,216種顏色。你打算定義這麼多字符串嗎?基本的事實是,顏色常量的數量非常有限,不值得定義字符串,更一般的說,它變得難以管理。 –

回答

3

Color.RED正在調用一個常量值。您不能撥打電話Color."RED"

RED引用類Color中的靜態字段,您無法使用字符串調用該字段。這與嘗試使用String在代碼中調用變量相同。它不這樣工作。

相反,創建這個方法:

public static void master(Color color) { 
    g.setColor(color); 
} 

,並調用它像這樣:

master(Color.RED); 

但是,你可以使用Color.parseColor代替,如果你想用一個字符串參數。

也許:

public static void master(String color) { 
    g.setColor(Color.parseColor(color)); 
} 

,並調用它像這樣:

master("#FF0000"); 
+0

啊哈!尼斯。我喜歡這種方式。比映射答案更簡單。謝謝! – Chief120

+1

@ Chief120沒問題。檢查我的更新,以另一種方式解析顏色(選擇首選項)。 –

1

A Color對象和表示該對象的字符串值是兩個完全不同的東西。

如果您想從字符串(例如「Red」)獲得java.awt.Color對象,那麼您必須使用某種方法將其轉換爲它所表示的顏色。

試試這個:

Color realColor = (Color) Color.class.getField(color).get(null); 
g.setColor(realColor); 

這將首先獲得相應的顏色對象爲字符串,它得到了Color對象就會調用setColor方法再經過。


編輯:如果你需要的只是能夠從另一個代碼位指定方法以外的顏色(和它不必是一個字符串),那麼你總是可以只傳遞一個實際的Color對象。

例如,

public static void master(Color color) { 
    g.setColor(color); 
} 

master(Color.RED); 

這使得master()方法相當無用的(除非你要包括有更多的邏輯),你會使用這個別的地方,但是當你不需要的時候它肯定會解析一個String顏色。

+1

它不會 - 此方法使用參數名稱查找系統屬性並將其值用作顏色。檢查此方法的Javadoc:'在系統屬性中查找顏色。' –

+0

是的,這不正常工作。我所要做的就是能夠在參數中聲明我想要的顏色,所以我不必用不同的顏色重寫整個方法。 – Chief120

+0

對不起,沒有注意到。更新了答案以解決這個問題,以適應大多數普通顏色。 – peter

3

您有一個名爲color的參數。 Color.colorColor類中尋找名爲color的成員,並且沒有一個(我認爲)。它有什麼也沒有與你的color參數有關。聲明如

static Color RED = <whatever>; 

Color包中定義了您可以在程序中使用的名稱。但是這些名稱並不是作爲運行時可用的字符串存儲在程序中(除了反射,但可能太複雜)。

您需要一種方法來查找某個表中的顏色名稱字符串,並將其轉換爲Color。因爲它看起來像getColor不工作,你可能需要建立自己的Map<String,Color>並對其進行初始化喜歡

m.put("RED", Color.RED); 
m.put("BLUE", Color.BLUE); 
... 

tutorial介紹了更多關於Map秒。

+0

這很聰明,但其他答案更簡單一些。謝謝! – Chief120