Создание случайного цвета в Java? - PullRequest
56 голосов
/ 22 ноября 2010

Я хочу нарисовать случайные цветные точки на JPanel в приложении Java. Есть ли способ создать случайные цвета?

Ответы [ 14 ]

102 голосов
/ 22 ноября 2010

Используйте случайную библиотеку:

import java.util.Random;

Затем создайте генератор случайных чисел:

Random rand = new Random();

Поскольку цвета разделены на красный, зеленый и синий, вы можете создать новый случайный цвет с помощьюсоздание случайных основных цветов:

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

Затем, чтобы окончательно создать цвет, передайте основные цвета в конструктор:

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

Вы также можете создавать различные случайные эффекты, используя этометод, такой как создание случайных цветов с большим акцентом на определенные цвета ... переходите в менее зеленый и синий, чтобы получить "розовый" случайный цвет.

// 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;

Или чтобы гарантировать, что только "светлые" цветасгенерированный, вы можете генерировать цвета, которые всегда> 0,5 для каждого цветового элемента:

// 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;

Существуют различные другие цветовые функции, которые можно использовать с классом Color, например, сделать цвет ярче:

randomColor.brighter();

Обзор класса Color можно прочитать здесь: http://download.oracle.com/javase/6/docs/api/java/awt/Color.html

34 голосов
/ 17 ноября 2013

Однострочник для случайных значений RGB:

new Color((int)(Math.random() * 0x1000000))
30 голосов
/ 22 ноября 2010

Если вам нужны приятные, пастельные цвета, лучше всего использовать систему 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);
17 голосов
/ 05 января 2012

Скопируйте и вставьте для ярких пастельных цветов радуги

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);
9 голосов
/ 22 ноября 2010

Если вы не хотите, чтобы это выглядело ужасно, я бы предложил определить список цветов в массиве, а затем использовать генератор случайных чисел, чтобы выбрать один.

Если вам нужен действительно случайный цвет, вы можете просто сгенерировать 3 случайных числа от 0 до 255 и затем использовать конструктор Color (int, int, int) для создания нового экземпляра 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);
5 голосов
/ 11 февраля 2014

Я знаю, что уже немного поздно для этого ответа, но я не видел, чтобы кто-нибудь еще это написал.

Как сказал Грег, вы хотите использовать класс Random

Random rand = new Random();

но разница, которую я собираюсь сказать, проста:

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

И это так просто!не нужно генерировать много разных поплавков.

4 голосов
/ 28 декабря 2015
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;
    }
}
2 голосов
/ 12 января 2018

Я использовал этот простой и умный способ для создания случайного цвета в Java,

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

Где #% 06x дает вам шестнадцатеричный гекс с нулем (всегда длиной 6 символов).

1 голос
/ 19 января 2015

Вот метод получения случайного цвета:

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);
}

Преимущества:

  • Получите целочисленное представление, которое можно использовать с java.awt.Color или android.graphics.Color
  • Сохраняйте статическую ссылку на Random.
1 голос
/ 22 ноября 2010

Кажется, вам нужны легкие случайные цвета. Не уверен, что именно ты имеешь в виду под светом. Но если вы хотите случайные «цвета радуги», попробуйте это

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
                );

Поиск цветовой модели HSB для получения дополнительной информации.

...