69 votes

Créer une couleur aléatoire en Java ?

Je veux dessiner des points colorés aléatoires sur un panneau JPanel dans une application Java. Existe-t-il une méthode permettant de créer des couleurs aléatoires ?

126voto

Greg Points 8483

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 finalement la couleur, il faut passer 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, comme par exemple créer des couleurs aléatoires en mettant l'accent sur certaines couleurs ... passer 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 les couleurs "claires" sont générées, vous pouvez générer des couleurs qui sont toujours > 0,5 de 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 d'autres fonctions de couleur qui peuvent être utilisées avec la fonction Color par exemple en rendant la couleur plus vive :

randomColor.brighter();

Une vue d'ensemble de la Color peut être lu ici : http://download.oracle.com/javase/6/docs/api/java/awt/Color.html

2 votes

Votre code pour ne produire que des couleurs vives/légères ne fonctionnera pas. next float n'accepte pas float ni double comme argument et ajouter .5 fait sortir la couleur de la gamme.

0 votes

Thomas Ahle Il produira toutes les couleurs possibles et imaginables. Je ne peux pas le dessiner en image :)

1 votes

Comme suggéré ci-dessus, il n'existe plus de constructeur nextFloat qui accepte un paramètre.

52voto

Boann Points 11904

Une ligne unique pour des valeurs RVB aléatoires :

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

40voto

Sualeh Fatehi Points 1493

Si vous voulez des couleurs agréables et pastel, il est préférable d'utiliser 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);

1 votes

Avez-vous un échantillon avec certaines des couleurs que cela génère ?

18voto

Komplot Points 161

Copiez-collez ceci pour obtenir des couleurs vives et pastel 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);

0 votes

Je préfère cette façon (HSB) de choisir une couleur au hasard. L'utilisation du système RVB peut créer des combinaisons très étranges. À titre d'information, la valeur de la teinte est multipliée en interne par 360 pour produire l'angle de teinte dans le modèle de couleur HSB (Javadoc).

9voto

Si vous ne voulez pas que cela 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 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);

1 votes

De cette façon, vous pouvez facilement éviter les points qui sont de la même couleur que l'arrière-plan.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X