3

重複の可能性:
Javaで色の文字列表現を印刷する方法

getColor()色を返すというメソッドがあります(のようにColor.BLACK)。getColor()その名前の文字列に変換する方法はありますか?

String test = getColor().toString(); 

getColor()が返される場合Color.BLACK

String test = Color.BLACK.toString();
System.out.println(test);

出力

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

3 に答える 3

3

toString()そのインスタンスを格納するために使用された変数の元の名前を再現することはできません(そのインスタンスを含む変数が複数存在する可能性があるため)。

Color1つの方法は、インスタンスを手動で比較することです。

Color theColor = getColor()
String colorName = null;
if (Color.BLACK.equals(theColor)) 
{
  colorName = "BLACK";
} 
else if (Color.WHITE.equals(theColor)) 
{
  colorName = "WHITE";
}
...
System.out.println(colorName);
于 2012-10-10T21:16:22.593 に答える
3

カラーコードに対するカラー名のカスタムマップを作成します。カラーコードを取得したら、カスタムマップを使用して文字列を取得します。

       Map<Color, String> colorMap = new HashMap<Color, String>();
       colorMap.put(Color.BLACK, "Black"),   
       colorMap.put(Color.RED, "Red"),  
       .......

色を取得したら、以下を使用して色の名前を取得します。

      Color myColor = getColor();
      String colorName = colorMap.get(myColor);
于 2012-10-10T21:18:36.050 に答える
1

いいえ。

Color.BLACKは幅広い色の1つであり、0、0、0のRGB値にマップされます。

RGBが0、0、1(ほぼ黒、ほんの少し青)の場合、それはどの色になりますか?オフグリーンはどうですか?または少し余分な赤で黄色?

そのため、生の色を再び文字列に戻す方法はありません。文字列で表される色よりも、さまざまなRGB値で表される色の方がはるかに多いためです。

コメントに記載されているNamedColor列挙型ルートをたどりたくない場合、簡単な解決策は、リフレクションを使用しColorてクラスの静的フィールドを調べColor、各フィールド名を関連する色をキーとしてハッシュマップに追加することです。 、大文字または小文字の重複のいずれかが含まれているため、両方を削除します。次に、自分の色がそこにあるかどうかを確認できます。

于 2012-10-10T21:16:20.757 に答える