Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中更改RGB颜色_Java_Mouselistener - Fatal编程技术网

在Java中更改RGB颜色

在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);

我用Java创建了一个程序(用于练习),我有一个星星,通过滚动鼠标,颜色必须从浅红色变为深红色。。(使用MouseWheelListener)和vica versa与其他类型的明星一起一切都很好,但只有这一个不起作用。。我不会让你们困惑,我会给你们看一些代码

这是红星班

    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)