I want to draw random coloured points on a JPanel in a Java application. Is there any method to create random colours?
13 Answers
Use the random library:
import java.util.Random;
Then create a random generator:
Random rand = new Random();
As colours are separated into red green and blue, you can create a new random colour by creating random primary colours:
// Java 'Color' class takes 3 floats, from 0 to 1.
float r = rand.nextFloat();
float g = rand.nextFloat();
float b = rand.nextFloat();
Then to finally create the colour, pass the primary colours into the constructor:
Color randomColor = new Color(r, g, b);
You can also create different random effects using this method, such as creating random colours with more emphasis on certain colours ... pass in less green and blue to produce a "pinker" random colour.
// 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;
Or to ensure that only "light" colours are generated, you can generate colours that are always > 0.5 of each colour element:
// 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;
There are various other colour functions that can be used with the Color
class, such as making the colour brighter:
randomColor.brighter();
An overview of the Color
class can be read here: http://download.oracle.com/javase/6/docs/api/java/awt/Color.html

- 1,468
- 2
- 16
- 31

- 21,235
- 17
- 84
- 107
-
2your code for will only produce bright/light colors will not work. next float does not accept float nor double as an argument and adding .5 makes color go out of range. – Xitcod13 Jun 06 '14 at 14:08
-
@ThomasAhle It will produce any and every possible colour. I can't draw that in a picture. :) – Greg Jun 27 '14 at 15:04
-
1As suggested above, doesn't exist anymore a nextFloat constructor that accepts a parameter. – giaffa86 May 08 '15 at 07:24
-
If you want a more "purple" tone of colors what would be the code changes? – kabuto178 Jul 02 '16 at 14:06
-
Purple is made up of blue and red, so increasing the amount of those two colours, or decreasing the amount of green will make it a more purple tone. Hope this helps. – Greg Jul 04 '16 at 14:15
A one-liner for random RGB values:
new Color((int)(Math.random() * 0x1000000))

- 48,794
- 16
- 117
- 146
If you want pleasing, pastel colors, it is best to use the HLS system.
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);

- 4,700
- 2
- 24
- 28
Copy paste this for bright pastel rainbow colors
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);

- 516
- 5
- 7
-
I prefer this way (HSB) of picking a random color. Using the RGB system can create very weird combinations. As a side note, the hue value is internally multiplied by 360 to produce the hue angle in the HSB color model (Javadoc). – patrickGranite Apr 22 '16 at 14:33
If you don't want it to look horrible I'd suggest defining a list of colours in an array and then using a random number generator to pick one.
If you want a truly random colour you can just generate 3 random numbers from 0 to 255 and then use the Color(int,int,int) constructor to create a new Color instance.
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);

- 48,794
- 16
- 117
- 146

- 35,279
- 21
- 87
- 141
-
1And this way you can easily avoid points that are the same colour as the background. – sje397 Nov 22 '10 at 14:29
I know it's a bit late for this answer, but I've not seen anyone else put this.
Like Greg said, you want to use the Random class
Random rand = new Random();
but the difference I'm going to say is simple do this:
Color color = new Color(rand.nextInt(0xFFFFFF));
And it's as simple as that! no need to generate lots of different floats.

- 1,237
- 3
- 17
- 34
-
Ahh. That's why I must have just skipped over it. The extra colour won't make a difference however :P – Shaun Wild Feb 11 '14 at 12:34
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;
}
}

- 7,266
- 4
- 35
- 36
-
Thanks, I know how to do this...but I didn't feel like it and you saved me some time! – Ryan Pelletier Dec 12 '18 at 04:05
I have used this simple and clever way for creating random color in Java,
Random random = new Random();
System.out.println(String.format("#%06x", random.nextInt(256*256*256)));
Where #%06x gives you zero-padded hex (always 6 characters long).

- 484
- 7
- 17
Here is a method for getting a random color:
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);
}
Benefits:
- Get the integer representation which can be used with
java.awt.Color
orandroid.graphics.Color
- Keep a static reference to
Random
.

- 37,824
- 19
- 133
- 148
You can instantiate a color with three floats (r, g, b), each between 0.0 and 1.0: http://download.oracle.com/javase/6/docs/api/java/awt/Color.html#Color(float,%20float,%20float).
Using Java's Random class you can easily instantiate a new random color as such:
Random r = new Random();
Color randomColor = new Color(r.nextFloat(), r.nextFloat(), r.nextFloat());
I can't guarantee they'll all be pretty, but they'll be random =)

- 11,603
- 5
- 34
- 53
Sure. Just generate a color using random RGB values. Like:
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);
}
You might want to vary up the generation of the random numbers if you don't like the colors it comes up with. I'd guess these will tend to be fairly dark.

- 26,876
- 10
- 61
- 112
-
1
-
you can use the Color.brighter() method to make any generated color look like. – Andrew Nov 22 '10 at 14:48
-
1Sandra, to influence the brightness, make sure the random values are never very dark. 0 is darkest and 255 is brightest, so just do a random.nextInt(128) + 128 for example to never get any colers darker than half brightness. – Stijn de Witt Nov 22 '10 at 14:49
-
@Stijn: Ditto. I might add that if you want more uniform brightness, you might make the 2nd value depend on the 1st and the 3rd depending on the first two. Like say red=nextInt(255); green=nextInt(255-red); etc. You could play with this sort of thing endlessly until you get the results you want. – Jay Nov 23 '10 at 17:22
-
Hey, whoever downvoted me, you might at least post a comment to say what your objection was. Ah well, my boss doesn't check my Stackoverflow score before filling out my paycheck, so I don't know why I care. – Jay Nov 23 '10 at 17:23
You seem to want light random colors. Not sure what you mean exactly with light. But if you want random 'rainbow colors', try this
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
);
Search for HSB color model for more information.

- 11,542
- 1
- 25
- 31
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;
}
}

- 14,672
- 5
- 54
- 79

- 60
- 1
- 6