我用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();
}
但颜色没有变化,谁能告诉我我做错了什么?
答案 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
。