web-dev-qa-db-fra.com

Créer des couleurs aléatoires en Java?

Je souhaite dessiner des points de couleur aléatoires sur un JPanel dans une application Java. Existe-t-il une méthode pour créer des couleurs aléatoires?

53
Elton.fd

Utilisez la bibliothèque aléatoire:

import Java.util.Random;

Créez ensuite un générateur aléatoire:

Random Rand = new Random();

Comme les couleurs sont séparées en rouge vert et bleu, vous pouvez créer une nouvelle couleur aléatoire en créant des couleurs primaires aléatoires:

// Java 'Color' class takes 3 floats, from 0 to 1.
float r = Rand.nextFloat();
float g = Rand.nextFloat();
float b = Rand.nextFloat();

Ensuite, pour créer enfin la couleur, passez les couleurs primaires dans le constructeur:

Color randomColor = new Color(r, g, b);

Vous pouvez également créer différents effets aléatoires à l'aide de cette méthode, par exemple créer des couleurs aléatoires en insistant davantage sur certaines couleurs ... passez dans moins de vert et de bleu pour produire une couleur aléatoire plus "rose".

// Will produce a random colour with more red in it (usually "pink-ish")
float r = Rand.nextFloat();
float g = Rand.nextFloat() / 2f;
float b = Rand.nextFloat() / 2f;

Ou, pour vous assurer que seules des couleurs "claires" sont générées, vous pouvez générer des couleurs qui sont toujours> 0,5 pour chaque élément de couleur:

// Will produce only bright / light colours:
float r = Rand.nextFloat() / 2f + 0.5;
float g = Rand.nextFloat() / 2f + 0.5;
float b = Rand.nextFloat() / 2f + 0.5;

Il existe diverses autres fonctions de couleur pouvant être utilisées avec la classe Color, telles que rendre la couleur plus lumineuse:

randomColor.brighter();

Un aperçu de la classe Color peut être lu ici: http://download.Oracle.com/javase/6/docs/api/Java/awt/Color.html

99
Greg

Une ligne pour les valeurs RVB aléatoires:

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

Si vous voulez des couleurs pastel agréables, utilisez le système HLS.

final float hue = random.nextFloat();
// Saturation between 0.1 and 0.3
final float saturation = (random.nextInt(2000) + 1000) / 10000f;
final float luminance = 0.9f;
final Color color = Color.getHSBColor(hue, saturation, luminance);
29
Sualeh Fatehi

Copier coller ceci pour des couleurs pastel vives aux couleurs de l'arc-en-ciel 

int R = (int)(Math.random()*256);
int G = (int)(Math.random()*256);
int B= (int)(Math.random()*256);
Color color = new Color(R, G, B); //random color, but can be bright or dull

//to get Rainbow, pastel colors
Random random = new Random();
final float hue = random.nextFloat();
final float saturation = 0.9f;//1.0 for brilliant, 0.0 for dull
final float luminance = 1.0f; //1.0 for brighter, 0.0 for black
color = Color.getHSBColor(hue, saturation, luminance);
17
Komplot

Si vous ne voulez pas que ça ait l'air horrible, je vous suggère de définir une liste de couleurs dans un tableau, puis d'utiliser un générateur de nombres aléatoires pour en choisir une.

Si vous voulez une couleur vraiment aléatoire, vous pouvez simplement générer 3 nombres aléatoires, allant de 0 à 255, puis utiliser le constructeur Color (int, int, int) pour créer une nouvelle instance Color.

Random randomGenerator = new Random();
int red = randomGenerator.nextInt(256);
int green = randomGenerator.nextInt(256);
int blue = randomGenerator.nextInt(256);

Color randomColour = new Color(red,green,blue);
9

Je sais qu'il est un peu tard pour cette réponse, mais je n'ai encore vu personne le dire.

Comme Greg l'a dit, vous voulez utiliser la classe Random

Random Rand = new Random();

mais la différence que je vais dire est simple:

Color color = new Color(Rand.nextInt(0xFFFFFF));

Et c'est aussi simple que ça! pas besoin de générer beaucoup de flotteurs différents.

5
Shaun Wild
import Android.graphics.Color;

import Java.util.Random;

public class ColorDiagram {
    // Member variables (properties about the object)
    public String[] mColors = {
            "#39add1", // light blue
            "#3079ab", // dark blue
            "#c25975", // mauve
            "#e15258", // red
            "#f9845b", // orange
            "#838cc7", // lavender
            "#7d669e", // purple
            "#53bbb4", // aqua
            "#51b46d", // green
            "#e0ab18", // mustard
            "#637a91", // dark gray
            "#f092b0", // pink
            "#b7c0c7"  // light gray
    };

    // Method (abilities: things the object can do)
    public int getColor() {
        String color = "";

        // Randomly select a fact
        Random randomGenerator = new Random(); // Construct a new Random number generator
        int randomNumber = randomGenerator.nextInt(mColors.length);

        color = mColors[randomNumber];
        int colorAsInt = Color.parseColor(color);

        return colorAsInt;
    }
}
4
Durul Dalkanat

J'ai utilisé ce moyen simple et intelligent pour créer des couleurs aléatoires en Java,

Random random = new Random();
        System.out.println(String.format("#%06x", random.nextInt(256*256*256)));

#% 06x vous donne un hexagone rempli de zéros (toujours 6 caractères).

2
Deepak Kumbhar

Vous semblez vouloir des couleurs aléatoires claires. Vous ne savez pas exactement ce que vous voulez dire par lumière. Mais si vous voulez des "couleurs arc-en-ciel" aléatoires, essayez ceci

Random r = new Random();
Color c = Color.getHSBColor(r.nextFloat(),//random hue, color
                1.0,//full saturation, 1.0 for 'colorful' colors, 0.0 for grey
                1.0 //1.0 for bright, 0.0 for black
                );

Recherchez le modèle de couleur HSB pour plus d'informations.

1
Ishtar

Vous pouvez instancier une couleur avec trois flottants (r, g, b), chacun entre 0,0 et 1,0: http://download.Oracle.com/javase/6/docs/api/Java/awt/Color.html Couleur (float,% 20float,% 20float ).

En utilisant la classe aléatoire de Java, vous pouvez facilement instancier une nouvelle couleur aléatoire en tant que telle:

Random r = new Random();
Color randomColor = new Color(r.nextFloat(), r.nextFloat(), r.nextFloat());

Je ne peux pas garantir qu'ils seront tous jolis, mais ils seront aléatoires =)

1
Jason Nichols

Sûr. Il suffit de générer une couleur en utilisant des valeurs RVB aléatoires. Comme:

public Color randomColor()
{
  Random random=new Random(); // Probably really put this somewhere where it gets executed only once
  int red=random.nextInt(256);
  int green=random.nextInt(256);
  int blue=random.nextInt(256);
  return new Color(red, green, blue);
}

Vous voudrez peut-être varier la génération des nombres aléatoires si vous n'aimez pas les couleurs qu'il crée. Je suppose que ceux-ci auront tendance à être assez sombres.

1
Jay

Voici une méthode pour obtenir une couleur aléatoire:

private static Random sRandom;

public static synchronized int randomColor() {
    if (sRandom == null) {
        sRandom = new Random();
    }
    return 0xff000000 + 256 * 256 * sRandom.nextInt(256) + 256 * sRandom.nextInt(256)
            + sRandom.nextInt(256);
}

Avantages:

  • Obtenir la représentation entière pouvant être utilisée avec Java.awt.Color ou Android.graphics.Color
  • Conservez une référence statique à Random.
0
Jared Rummler
package com.adil.util;

/**
* The Class RandomColor.
*
* @author Adil OUIDAD
* @URL : http://kizana.fr
*/
public class RandomColor {      
    /**
    * Gets the random color.
    *
    * @return the random color
    */
    public static String getRandomColor() {
         String[] letters = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
         String color = "#";
         for (int i = 0; i < 6; i++ ) {
            color += letters[(int) Math.round(Math.random() * 15)];
         }
         return color;
    }
}
0
user1942990