我正在从另一个类创建一定数量的对象,并尝试使用java.awt.Color为每个类随机化颜色。
for (int i = 0; i < numBalls; i++){
ballsInSim.add(
new BoxBall(
0,
0,
(int) boxWidth,
(int) boxHeight,
rng.nextInt(35) + 15,
rng.nextInt(500) + 25,
rng.nextInt(500) + 25,
Color.BLUE, // Create new Colour here using constructor
myCanvas
)
);
}
当前Color.BLUE
,我想调用Color的构造函数之一,它使用三个整数作为红色,绿色和蓝色值(Color(int r,int g,int b))。< / p>
如何调用该构造函数?我对Java比较陌生,而且我在解决这个问题时遇到了一些麻烦。
答案 0 :(得分:1)
如果使用您想要的参数调用构造函数,编译器将选择正确的参数。
答案 1 :(得分:1)
为了达到你想要的效果,只需添加以下内容:
new Color(0, 0, 255)
所以从本质上讲,它看起来像这样:
ballsInSim.add(new BoxBall(0, 0, (int) boxWidth, (int) boxHeight, rng.nextInt(35) + 15, rng.nextInt(500) + 25, rng.nextInt(500) + 25, new Color(0, 0, 255), myCanvas));
每次都要获得随机颜色:
Random R = new Random(256);
Random G = new Random(256);
Random B = new Random(256);
//your color constructor will then be:
new Color(R.nextInt(), G.nextInt(), B.nextInt());
要了解有关Color Class的更多信息,请参阅:Color: Java 7
希望这有帮助
答案 2 :(得分:1)
关于实际问题:Color
有多个构造函数。其中一些只在参数类型上有所不同,即:
Color(float r, float g, float b)
Color(int r, int g, int b)
致电时
Color c = new Color(r,g,b);
关于调用哪个构造函数的问题实际上有点棘手:它取决于给定参数的类型。有关详细信息,请参阅Java语言规范的Section 15.9.3. Choosing the Constructor and its Arguments。
但是,在这种情况下,您可以简化:如果传入三个float
值,则会调用float
版本。如果您传入三个int
值,则会调用int
版本。
关于实施:如果您打算创建随机颜色,我建议您创建一个小帮手方法:
private static final Random COLOR_RANDOM = new Random(0);
private static Color createRandomColor() {
int r = COLOR_RANDOM.nextInt(256);
int g = COLOR_RANDOM.nextInt(256);
int b = COLOR_RANDOM.nextInt(256);
return new Color(r,g,b);
}
然后,您可以随处调用此方法,例如......
for (int i = 0; i < numBalls; i++)
{
ballsInSim.add(new BoxBall(0, 0, (int) boxWidth, (int) boxHeight,
rng.nextInt(35) + 15, rng.nextInt(500) + 25, rng.nextInt(500) + 25,
createRandomColor(), // <---- ... here!
myCanvas));
}
答案 3 :(得分:1)
相当简单,Java根据您提供给构造函数的参数选择要使用的构造函数。如果是Color,您有7个选项,如下所示:
Color(ColorSpace cspace, float[] components, float alpha)
使用float数组和指定alpha中指定的颜色分量在指定的ColorSpace中创建颜色。
Color(float r, float g, float b)
使用指定的红色,绿色和蓝色值(0.0 - 1.0)创建不透明的sRGB颜色。
Color(float r, float g, float b, float a)
使用指定的红色,绿色,蓝色和alpha值(范围为0.0 - 1.0)创建sRGB颜色。
Color(int rgb)
使用指定的组合RGB值创建不透明的 sRGB 颜色,该值由位16-23中的红色分量,位8-15中的绿色分量和位0-7中的蓝色分量组成
Color(int rgba, boolean hasalpha)
使用指定的组合RGBA值创建 sRGB 颜色,该值包含位24-31中的alpha分量,位16-23中的红色分量,位8-15中的绿色分量,以及位0-7中的蓝色分量。
Color(int r, int g, int b)
使用指定的红色,绿色和蓝色值(0 - 255)创建不透明的sRGB颜色。
Color(int r, int g, int b, int a)
使用指定的红色,绿色,蓝色和Alpha值(范围为0 - 255)创建 sRGB 颜色。
如果您提供三个 ints ,将使用最后一个。如果有三个浮动,它将是第三个。
Colour.BLUE
替换为:new Colour(
new Random().nextInt(256),
new Random().nextInt(256),
new Random().nextInt(256),
)
答案 4 :(得分:0)
答案 5 :(得分:0)
这样做:
ballsInSim.add(new BoxBall(0, 0, (int) boxWidth, (int) boxHeight, rng.nextInt(35) + 15, rng.nextInt(500) + 25, rng.nextInt(500) + 25, new Color(r, g, b), myCanvas));}
其中r, g, b
先前已定义0到255之间的随机整数;