Color.getColor (String, int) - случайный цвет - PullRequest
0 голосов
/ 18 мая 2018

Я пытаюсь установить случайный цвет объекта JButton с помощью:

button.setBackground(Color.getColor(null,(int) (Math.random() * 255 + 1)));

, но он производит только разные оттенки синего.Спасибо.

Ответы [ 5 ]

0 голосов
/ 18 мая 2018

Проверьте Конструктор цвета .Используя только цифры от 0 до 255, вы используете различные синие цвета.Если вы хотите правильно использовать это в соответствии с вашим кодом и вашим Color Conructor, вы можете использовать это:

int red = (int) (Math.random() * 255 + 1);
int blue= (int) (Math.random() * 255 + 1);
int green = (int) (Math.random() * 255 + 1);
button.setBackground(Color.getColor(null, red * blue * green));

Кстати, вы можете использовать другой конструктор Color, такой как:

Color color = new Color(red, green, blue));
button.setBackground(color);
0 голосов
/ 18 мая 2018

В Java, когда вы получаете объект Color с целым числом, он сохраняет синий в битах 0-7, зеленый в битах 8-15 и красный в битах 16-23 https://docs.oracle.com/javase/7/docs/api/java/awt/Color.html#Color(int)

Для компенсациидобавьте каждый компонент вместе для чего-то подобного

public int GetRandomColorInt()
{
    return (Math.random() * Math.pow(2,8)) //blue
        + (Math.random() * Math.pow(2,16)) //green
        + (Math.random() * Math.pow(2,24) ) //red

}

И в заданном фоновом вызове

button.setBackground(Color.getColor(null,(int) GetRandomColorInt()));
0 голосов
/ 18 мая 2018

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

Попробуйте это:

button.setBackground(new Color((int)(Math.random() * 0x1000000)));
0 голосов
/ 18 мая 2018

Вы получаете только оттенки синего, потому что вы можете заполнить только 8 наименее значимых битов (int) (Math.random() * 255 + 1), которые контролируют интенсивность синего.Вам нужна возможность контролировать все 24 бита (или 32, если вы включаете прозрачность).

С java.util.Random объектом rnd:

Random rnd = new Random();
0 голосов
/ 18 мая 2018

используйте следующее: -

int red = (int) (Math.random() * 256);
int green = (int) (Math.random() * 256);
int blue = (int) (Math.random() * 256);
button.setBackground(new Color(red, green, blue));
...