0

私はJavaでプログラムを作成しました(演習目的で)、マウスをスクロールして明るい赤から濃い赤に色を変える必要がある星があります..( MouseWheelListener を使用)およびその逆 すべてが他の種類の星でもうまく機能しますが、これだけが機能しません..皆さんを混乱させる代わりに、いくつかのコードを示します!

レッドスタークラスはこちら

    public class StarRed extends Star {

    protected int r = 221;
    protected Color rood = new Color(r, 0, 0);

    public StarRed(int radius, int x, int y) {
        super(radius, x, y);


        this.color = rood;

        System.out.println(r);
    }

}

ご覧のとおり、R変数を使用して色を変更しようとしました..

私のコントローラーでこれを行います

    @Override
public void mouseWheelMoved(MouseWheelEvent e) {

    for(StarRed s: rs) {
        s.r += e.getWheelRotation();
    }
    repaint();
}

しかし、色は変わりません。誰かが私が間違っていることを教えてもらえますか?

4

4 に答える 4

1

次のように、ホイールを動かすたびに新しい色をインスタンス化する必要があります。

for(StarRed s: rs) {
    s.r += e.getWheelRotation();
    s.rood = new Color(r, 0, 0);
    s.color = s.rood;
}

現在、フィールドのみを変更しており、構築に使用されrた Color は変更していませんroodr

于 2012-12-08T20:23:18.310 に答える
1

Color は不変クラスです。r の値を変更しても、の値は変更されません。protected Color rood

したがって、スタークラスに新しいメソッドを追加する必要があります。このメソッドでは、使用する rood の値、つまり使用する色が、指定されたパラメーターに基づいて変更されます。

于 2012-12-08T20:19:36.133 に答える
1

mouseWheelMoved を正しく実装したと仮定すると、値 r に追加するときに問題が発生します。

ルードは次のとおりです。

protected Color rood = new Color(r, 0, 0);

色を作成した後に の値をr変更しても、 の赤い部分の値は変更されませんColor rood

代わりに、Color rood の赤の値を追加して、Color 自体を変更する関数を作成します。

于 2012-12-08T20:19:53.023 に答える
1

int(またはその他のプリミティブ型) の変数をメソッドまたはコンストラクターに渡すときは、変数の(必要に応じてコピー) を渡します。その値への参照を渡しません。したがって、変数の値を変更しても、以前にこの変数で作成した Color は変更されません。

色オブジェクトを変更する必要があります (ただし、これは Color が不変であるため不可能です)、または色オブジェクト自体を別のものに置き換える必要があります。

于 2012-12-08T20:20:42.647 に答える