繁体   English   中英

在Java中更改RGB颜色

[英]change RGB color in Java

我已经用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();
}

但是颜色没有改变,有人可以告诉我我做错了吗?

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

因此,您需要做的是在star类中添加新方法,其中rood的值(即要使用的颜色)将根据给定的参数进行更改。

假设您已正确实现mouseWheelMoved,则当您添加到值r时,问题就出在这里。

尽管十字架是:

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

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

因此,您想创建一个函数,将其添加到色标中的红色值,然后更改色本身。

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

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

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

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

目前只更改领域r而不是颜色roodr用于构造。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM