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

Color 是不可变类,改变 r 的值不会改变protected Color rood

所以你需要做的是在你的明星类中添加新的方法,在这个类中,rood 的值,即要使用的颜色会根据给定的参数而改变。

于 2012-12-08T20:19:36.133 回答
1

假设您已经正确实现了 mouseWheelMoved,那么问题出在您添加值 r 时。

虽然 rood 是:

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

当您r在创建颜色后更改 的值时,它不会更改您的红色部分的值Color rood

因此,您想要创建一个函数,添加到您的颜色 rood 的红色值,然后更改颜色本身。

于 2012-12-08T20:19:53.023 回答
1

当您将类型int(或任何其他原始类型)的变量传递给方法或构造函数时,您传递变量的(如果您愿意,可以传递一个副本)。您没有传递对其值的引用。因此,更改变量的值不会更改您之前使用此变量创建的颜色。

您需要改变颜色对象(但这是不可能的,因为颜色是不可变的),或者用另一个替换颜色对象本身。

于 2012-12-08T20:20:42.647 回答
1

每次移动滚轮时都需要实例化一种新颜色,如下所示:

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

目前您只更改 field ,而不是用于构造r的 Color 。roodr

于 2012-12-08T20:23:18.310 回答