2

getColor(String name) 関数を使用して色を変更しようとしていますが、うまくいかないようです。何らかの間違いをしている可能性があります。コードは次のとおりです。

public class ComboBoxPractice extends JFrame{

private String names={"Color.YELLOW","Color.RED","Color.GREEN"};

public ComboBoxPractice()
{
    ...

    box.addItemListener(

            new ItemListener()
            {
                public void itemStateChanged(ItemEvent event)
                {
                    if(event.getStateChange()==event.SELECTED)
                    {
                        getContentPane().setBackground(Color.getColor(names[box.getSelectedIndex()]));
                    }
                }
            }
    );
}

}

YELLOW 、 RED 、 BLUE などの Color 名のみを含む String 配列も試しました。しかし、それは機能していませんでした。

Class Color の配列を作成して色を変更する別の方法は知っていますが、この方法を試してみたかったのです。

私は何を間違っていますか?

よろしく

4

2 に答える 2

4

Color クラスを次のように使用します。

 private Color[] colors ={Color.YELLOW,Color.RED,Color.GREEN};

クラスを使用する場合は、Color以下のステートメントを次のように更新できます。

    getContentPane().setBackground(Color.getColor(names[box.getSelectedIndex()]));

なので

    getContentPane().setBackground(colors[box.getSelectedIndex()]);

または、「黒」、「赤」などの名前を使用します。

    private String[] names={"yellow","red","green"};

上記のように色名を使用することにした場合、Color以下のように反射を使用してオブジェクトを取得できます。

    Field field = Color.class.getField(names[0]);
    Color color = (Color)field.get(null);
于 2012-10-29T16:04:51.557 に答える
1

別のアプローチは、リフレクションを使用しColorてフィールド名からインスタンスを取得することです。例:

Field field = Color.class.getField("YELLOW");
Color c = (Color)field.get(null);

カラー文字列に実際のクラス名が含まれていないことに注意してください。このアプリケーションの場合、次のようになります。

Field field = Color.class.getField(names[box.getSelectedIndex()]);
Color backgroundColor = (Color)field.get(null);
于 2012-10-29T16:15:57.940 に答える