用Java改变RGB颜色

时间:2012-12-08 20:14:34

标签: java mouselistener

我用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 个答案:

答案 0 :(得分:1)

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

的值

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

答案 1 :(得分:1)

假设你已经正确实现了mouseWheelMoved,那么当你添加到值r时就会出现问题。

虽然罗德是:

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

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

所以相反,你想要一个函数来增加你的Color的红色值,然后改变颜色本身。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

每次移动方向盘时都需要实例化一个新颜色,如下所示:

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

目前,您只更改字段r,而不是rood用于构建的颜色r