【问题标题】:How to generate random colors in Java? [duplicate]如何在 Java 中生成随机颜色? [复制]
【发布时间】:2013-07-15 20:05:20
【问题描述】:

我想在 Java 中为JLabel 生成随机颜色。 JLabel 将每 100 毫秒更改一次背景,并且背景必须是随机的。如何做到这一点?

我想过使用javax.swing.Timer 类来做到这一点。看,我被难住了。当我尝试 label.setBackground(Color.CYAN) 时,我什至没有获得背景信息

JLabel l=new JLabel("Label");
Timer t=new Timer(2,new ActionListener(){
  public void actionPerformed(ActionEvent ae)
  {
       // what is the code here?
  }
});

【问题讨论】:

  • 发帖前请先搜索!
  • @JavaTechnical 我搜索了但没有找到!
  • 搜索词是什么?我建议'[java] color random'使用SO。
  • 使用[tag]搜索,也可以尝试使用不同的关键字。

标签: java swing colors jlabel


【解决方案1】:

你可以使用java.util.Random类和构造函数,

当我尝试了 label.setBackground(Color.CYAN)

这是因为label 不是不透明的。使其不透明以使背景可见。

final JLabel label=new JLabel("Label");
        // Label must be opaque to display
        // the background
        label.setOpaque(true);

        final Random r=new Random();
        Timer t=new Timer(100,new ActionListener(){
            public void actionPerformed(ActionEvent ae)
            {
                Color c=new Color(r.nextInt(256),r.nextInt(256),r.nextInt(256),r.nextInt(256));
                label.setBackground(c);
            }
        });
        t.start();

您可以使用Color 类中的任何构造函数。要生成float 值,您可以使用Math.random()r.nextFloat()

【讨论】:

  • 没有编译! :(
  • 导入正确的Timer
  • java.utiljavax.swing 都包含 Timer 类,使用 Random 类只需写 import java.util.Random; 它必须工作。
  • @JavaTechnical 只是想指出,为了正确起见,您应该将 255 替换为 256,因为 nextInt() 返回一个介于 0(含)和指定值之间的 «值值(不包括)»Color 接受 0 到 255 之间的整数。
  • 我在你评论之前就把它换掉了!第一的 :)!不管怎么说,多谢拉! +1
【解决方案2】:

如果我是,我只会随机化色调分量,而不是亮度,而不是饱和度。

double hue = Math.random();
int rgb = Color.HSBtoRGB(hue,0.5,0.5);
Color color = new Color(rgb);

它会更漂亮。

【讨论】:

    猜你喜欢
    • 2013-12-31
    • 2013-02-02
    • 2013-01-21
    • 1970-01-01
    • 2023-01-05
    • 1970-01-01
    • 2010-12-07
    • 2014-10-08
    • 2013-10-02
    相关资源
    最近更新 更多