[英]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
而不是颜色rood
说r
用于构造。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.