【问题标题】:How can I change the colour of my window background randomly in java?如何在java中随机更改窗口背景的颜色?
【发布时间】:2014-03-19 08:02:17
【问题描述】:

我开发这个程序只是为了好玩,并且有实现随机背景颜色转换器的想法。进行研究并通过我的知识,我设法遇到了一个 1 行代码,它可以按照我的要求进行操作。但我无法理解完整的代码。谁能给我解释一下,我将非常感激...代码如下。

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

我相信这段代码正在做的是创建 java 已经创建的方法 color 的新实例,将其转换为整数并从中获取随机数并将其乘以 0x1000000。这是正确的,请纠正我。

我发现很难理解为什么它的时间为 0x10000000,最终会回到 0。谢谢,非常感谢您的帮助。谢谢。

【问题讨论】:

  • 0x1000000 = 16777216(1600万色),例如davidnaylor.org/blog/2005/02/all-16777216-rgb-colours
  • 什么意思,0x1000000 表示 1600 万种颜色,不会 0*1000000 = 0。您能否确认我是否也正确解释了 math.random,谢谢。
  • 是前缀0x。它不是算术表达式,意思是“乘”,它是“十六进制”的缩写

标签: java swing random colors


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

    这段代码对我来说似乎很无聊。因为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 参数。

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

    贾罗德。

    【讨论】:

    • @mastercort889,嗨,你给的两个代码都给我一个错误。
    • 您是否添加了所有适当的导入? (假设 Eclipse IDE)
    【解决方案3】:

    Math.random() 返回一个介于 0.0 和 1.0 之间的双精度值,不包括 1.0 端。乘以 0x1000000 会产生一个介于 0 和 0xffffff 之间的 int 值。适合随机颜色。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-22
      • 2020-06-16
      • 2022-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多