在Java中更改RGB颜色
我用Java创建了一个程序(用于练习),我有一个星星,通过滚动鼠标,颜色必须从浅红色变为深红色。。(使用MouseWheelListener)和vica versa与其他类型的明星一起一切都很好,但只有这一个不起作用。。我不会让你们困惑,我会给你们看一些代码 这是红星班在Java中更改RGB颜色,java,mouselistener,Java,Mouselistener,我用Java创建了一个程序(用于练习),我有一个星星,通过滚动鼠标,颜色必须从浅红色变为深红色。。(使用MouseWheelListener)和vica versa与其他类型的明星一起一切都很好,但只有这一个不起作用。。我不会让你们困惑,我会给你们看一些代码 这是红星班 public class StarRed extends Star { protected int r = 221; protected Color rood = new Color(r, 0, 0);
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();
}
但是颜色不变,有人能告诉我我做错了什么吗 颜色是不可变的类,更改r的值不会更改受保护颜色rood的值
因此,您需要做的是在star类中添加新方法,其中rood的值即要使用的颜色会根据给定的参数进行更改。颜色是不可变的类,更改r的值不会更改受保护颜色rood的值。
因此,您需要做的是在star类中添加新方法,其中rood的值即要使用的颜色会根据给定的参数进行更改。假设您已经正确地实现了mouseWheelMoved,问题在于您在添加值r时 尽管rood是:
protected Color rood = new Color(r, 0, 0);
创建颜色后更改r
的值时,它不会更改颜色rood
的红色部分的值
因此,您需要创建一个函数,将颜色rood的红色值相加,然后更改颜色本身。假设您已经正确地实现了mouseWheelMoved,问题在于将值r相加时 尽管rood是:
protected Color rood = new Color(r, 0, 0);
创建颜色后更改r
的值时,它不会更改颜色rood
的红色部分的值
因此,您需要创建一个函数,将颜色rood的红色值相加,然后更改颜色本身。当您将int类型的变量(或任何其他基元类型)传递给方法或构造函数时,您将传递该变量的值(如果愿意,可以复制)。不传递对其值的引用。因此,更改变量的值不会改变您以前使用此变量创建的颜色
您需要改变颜色对象(但这是不可能的,因为颜色是不可变的),或者用另一个颜色对象替换颜色对象本身。当您将类型为
int
(或任何其他基元类型)的变量传递给方法或构造函数时,您将传递该变量的值(如果愿意,可以是一个副本)。不传递对其值的引用。因此,更改变量的值不会改变您以前使用此变量创建的颜色
您需要改变颜色对象(但这是不可能的,因为颜色是不可变的),或者用另一个颜色对象替换颜色对象本身。每次移动控制盘时,您都需要实例化一种新颜色,如下所示:
for(StarRed s: rs) {
s.r += e.getWheelRotation();
s.rood = new Color(r, 0, 0);
s.color = s.rood;
}
当前,您仅更改字段
r
,而不是r
用于构造的颜色rood
。您需要在每次移动控制盘时实例化一种新颜色,如下所示:
for(StarRed s: rs) {
s.r += e.getWheelRotation();
s.rood = new Color(r, 0, 0);
s.color = s.rood;
}
当前,您只更改字段
r
,而不是使用r
构造的颜色rood
。即使颜色是可变的,更改r的值也不会更改颜色。问题不是不变性,而是通过值传递与通过引用传递。即使颜色是可变的,更改r的值也不会改变颜色的任何内容。问题不是不变性,而是按值传递与按引用传递。不完全是。它需要是s.color=新颜色(r,0,0)不完全相同。它需要是s.color=新颜色(r,0,0)