質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Javaアプレット

Javaアプレットは、Webページに組み込まれて実行されるJavaアプリケーションの形式です。Java SE 11で廃止となりました。

Q&A

解決済

2回答

4395閲覧

javaアップレットで、String型変数に入った文字列によりColorを決定したい

nuiri1343

総合スコア54

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Javaアプレット

Javaアプレットは、Webページに組み込まれて実行されるJavaアプリケーションの形式です。Java SE 11で廃止となりました。

0グッド

0クリップ

投稿2017/04/20 09:33

###質問
タイトルの通り、String型変数に入った文字列によりColorを決定したいです。

具体的には、
String型変数に"RED"や、"BLUE"、"BLACK"などが入っている状態で、
この変数を利用してg.setColor(Color.RED)や、g.setColor(Color.BLUE)のような操作がしたいです。

String型変数の値によって変えればいいので
if文やswitch文で分岐すれば作れますが、
他に方法はありませんか?

自分の願望では以下のようなコードで出来たらいいなと思ってました。

String s = "BLACK";
g.setColor(Color.s); //sはString型変数のsです。

どうかよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

私も詳しくないのですが、「リフレクション」という手法になるのではないでしょうか。
ここ位しか見てませんが、名前をもとにフィールドを参照できます。

投稿2017/04/20 15:06

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

よく考えたらアプレット前提でJavaFXの利用はNGだと思います。今現在アプレットを使うという選択をするのがどうかという話はありますが、あくまでアプレットを前提とするならswordoneさんの回答にあるようにリフレクションを使うか、アプレット自身がカラー名とRGB値の対応表をクラス内に定義するなり、リソースとして用意しておくなりしたほうが適切かと思います。


若干悩ましい点があるのですが、

javafx.scene.paint.Color.web("red");

のようにするとwebカラー(色名, #rgb, #rrggbb, etc.)を解釈できます。

Colorリファレンス

しかし、これはJavaFXのColorクラスでして、Appletが前提とするswingのColorクラスとしては直接つかえません><。
とはいっても一旦JavaFXのColorインスタンスが得られればそれをswingのColorへ変換してAppletで使えるようにはできます。

java

1// java.awt.Color : awt/swingのColorクラス 2// javafx.scene.paint.Color : JavaFXのColorクラス 3 4java.awt.Color toSwingColor(javafx.scene.paint.Color fxColor) { 5 double r = fxColor.getRed(); 6 double g = fxColor.getGreen(); 7 double b = fxColor.getBlue(); 8 double a = fxColor.getOpacity(); 9 return new java.awt.Color((float)r, (float)g, (float)b, (float)a); 10}

投稿2017/04/20 11:50

編集2017/04/21 10:02
KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nuiri1343

2017/04/21 06:23

なるほど。 一応、andoroidパッケージに、Color.parseColor()というメソッドがあるのは知っていたのですが 出来ればawtパッケージ内だけでおさめたかったので質問いたしました。 とすると、アップレットでは、自分の望むようなものは難しいということなのでしょうか?
KSwordOfHaste

2017/04/21 09:57 編集

あれ、androidでしたか。applet=swingというイメージがあってPCだと思ってました。 確かにアプレットだと機種依存のパッケージは使うべきでないでしょうが・・・ しかし、その点を考えるより先に・・・ 回答中では触れなかったのですがもうすぐアプレットは事実上の廃止になると思います。今現在直ちに使えないところまではいってないと思いますがJavaSE9からOracleはpluginを提供しなくなりますし、各ブラウザーもJava-pluginは一部の有償サポートユーザー以外は提供なくなると思います。そこはどうでしょう・・・ --- というより自分の回答もアプレット前提の回答としてはおかしいですねw; 名前で解決することをapplet前提で実装するなら・・・swordoneさんの回答のようにawt.Colorクラスにあるフィールド名からリフレクション(!)でとってくるか自分自身で名前とRGB値の一覧表をプロパティーへおいておくなどの手の方が適切と思います。回答変更します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問