如何在java中随机更改窗口背景的颜色?

时间:2014-02-19 06:35:31

标签: java swing random colors

我正在研究这个程序只是为了好玩,并且有了实现随机背景颜色转换器的想法。做研究并根据我的知识,我设法遇到了一行代码,可以按照我的要求进行。但我无法理解完整的代码。有人可以向我解释一下,我真的很感激......代码如下。

new Color((int) (Math.random() * 0x1000000))

我认为这段代码的作用是创建一个已经由java创建的方法颜色的新实例,将其转换为整数并从中获取一个随机数,并乘以0x1000000。这是正确的,请纠正我。

我发现很难理解为什么它的次数是0x10000000,最终会回到0.谢谢,非常感谢你的帮助。感谢。

3 个答案:

答案 0 :(得分:3)

这段代码对我来说似乎很无聊。因为Math.random()返回一个十进制数,所以将它乘以0x1000000将乘以十六进制格式的1,000,000。

我将使用的代码是:

Color c = new Color(new Random().nextInt(256), new Random().nextInt(256), new Random().nextInt(256));

Color c = new Color(Math.random(), Math.random(), Math.random());

前者会生成高达255(包括)的随机整数,并将它们作为Color构造函数的R,G和B参数,而后者会生成随机小数(有点像百分比)作为R的百分比, Color构造函数的G和B参数。

测试并报告您的发现! :)

贾罗德。

答案 1 :(得分:3)

Math.random()返回介于0.0和1.0之间的双精度,在1.0侧独占。乘以0x1000000会产生介于0和0xffffff之间的int值。哪种颜色适合随机。

使用Random.nextInt(0xffffff)的IMO会更清楚。 (在它下面做同样的事情)

答案 2 :(得分:2)

0x1000000不是算术表达式,它是16777216的十六进制值。

Math.random返回0到1之间的随机值,然后您可以将其乘以您要查找的范围;在你的情况下是一个完整的整数。

然后将该整数用作Color-instance的参数,该实例将提取3个字节;红色,绿色和蓝色m,创造一种非常随机的颜色。按照要求。

或者,您可以单独创建每个颜色组件,使用类似的东西更有意义;

color = new Color(
    Math.random() * 255, //red
    Math.random() * 255,  //green
    Math.random() * 255); //blue