Как создавать цвета
Содержание
1 Введение
2 Запуск аудио клипов
3 Класс JSlider
4 Программа ColorChanger
5 Ссылки
Введение
Во времена моего детства большая коробка карандашей Crayola включала в себя 64 цвета. В современных наборах находятся карандаши 96-ти цветов, а в основной набор цветов Crayola входит 120 различных оттенков, включая некоторые вариации «scratch-and-sniff». За столетнюю историю фирма использовала для своих карандашей более четырехсот различных цветов.
Цветовые оттенки получают смешением отдельных пигментов. Например, сочетание красного и желтого дает оранжевый цвет. Однако в компьютерах с цветами все обстоит иначе. Вместо соединения цветовых пигментов смешиваются яркости цветов. На компьютере желтый цвет можно получить, смешав красный с зеленым.
Используя вариации сочетания трех цветов различных интенсивностей, можно получить полную цветовую палитру. Этими цветами являются красный, зеленый и голубой, а подобную цветовую схему обычно принято называть RGB. Интенсивность каждого из трех цветов может принимать 256 различных значений, таким образом, в схеме RGB мы имеем 256*256*256=16,777,216 цветов. В стандартной библиотеке платформы Java 2 для представления цвета в RGB есть специальный класс java.awt.Color.
Класс Color содержит два набора из тринадцати констант, соответствующих наиболее часто используемым цветам. В одном наборе названия всех тринадцати цветов представлены в нижнем регистре (red), а во втором – в верхнем (RED). Первоначально существовал только один набор с именами в нижнем регистре. И только в выпуске Java 2 Standard Edition версии 1.4 был предложен второй набор. В отличие от первого, во втором наборе принцип присваивания константам имен соответствует общепринятым именным соглашениям.
Кроме параметров RGB существует еще один – непрозрачность. Он задает непрозрачность или, иными словами, плотность цвета (его также называют альфа-каналом).
Чем больше значение непрозрачности, тем плотнее цвет. Так же как и установки базовых цветов, параметр непрозрачности может принимать 256 различных значений. Палитра при этом будет состоять уже из 4,294,967,296 цветов. Необходимо помнить, что хотя класс Color поддерживает более четырех миллиардов цветов, с их отображением справятся не все видеокарты. По этой причине рекомендуется ограничить количество цветов используемых в одном подмножестве.
Комбинацию всех возможных цветовых настроек (альфа, красный, зеленый и голубой) можно выразить при помощи переменной типа int. Так как каждый параметр может принимать 256 значений, то для кодирования данных потребуется по 8 бит, итого 4*8 бит=32 бита на каждый цвет (что совпадает с разрядностью типа int). Параметры устанавливаются в следующем порядке: альфа-канал, красный, зеленый, голубой (диапазон значений 0-255).
Цвета задаются различными способами. Как упоминалось ранее, можно использовать имена из библиотеки констант (например, RED, GREEN или BLUE). Кроме этого существуют методы brighter() и darker(), которые соответствующим образом настраивают текущий цвет. Однако наиболее распространен способ, где каждый цвет задается при помощи целых чисел, указывающих на параметры его составляющих (красной, зеленой, голубой и при необходимости непрозрачности). Если значение непрозрачности не указано, она считается равной 100%.
В качестве примера рассмотрим различные способы задания красного цвета. Первые два – константы RED и red. В обоих случаях при отображении данного цвета зеленая и голубая составляющие отсутствуют.
Кроме этого можно вызвать конструктор для класса Color и передать ему значение 255 для красной составляющей и значение 0 для остальных.
Color red = new Color(255, 0, 0
И, наконец, вы можете сочетать настройки трех базовых цветов с параметром непрозрачности при помощи еще одного конструктора:
int value = ((255 & 0xFF) << 16);
Color red = new Color(value);
При этом значение составляющей красного цвета помещается во второй байт int. При желании вы можете отдельно задавать значение каждой составляющей следующим образом:
int value =
((alpha & 0xFF) << 24) |
((red & 0xFF) << 16) |
((green & 0xFF) << 8) |
((blue & 0xFF) << 0);
Вместо того чтобы использовать отдельно настройки каждой цветовой составляющей, конструктор Color воспримет все значения как одно (new Color(value)).
Имея в наличие объект Color, можно использовать его для указания цвета экрана, фонового или основного цветов, а также для любых других подобных задач.
Второй механизм управления цветами использует настройки HSB, указывающие на тон (hue), насыщенность (saturation) и яркость цвета (brightness).
Существует также класс java.awt.SystemColor, обеспечивающий доступ к цветам, определенным платформой пользователя. Это позволяет создавать компоненты, цвет которых будет совпадать с цветом соответствующих компонентов системы.
Проверьте полученные знания при помощи нашего интерактивного теста.
Запуск аудио клипов
Java API обеспечивает простую абстракцию для запуска звуковых клипов. Данный процесс напоминает извлечение и отображение картинок. Интерфейс AudioClip используется для представления аудио-файлов. Создавая объект AudioClip при помощи метода getAudioClip или newAduioClip класса Applet, вы тем самым получаете доступ к методам интерфейса AudioClip.
Этими методами являются:
- loop – запускает аудио клип, непрерывно вызывая объект AudioClip.
- play – проигрывает полученный аудио клип. При каждом вызове метода клип запускается заново.
- stop – останавливает проигрывание клипа.
Наиболее популярными форматами, используемыми в приложениях или апплетах, являются WAV, AU и SND.
Далее представлен пример создания объекта AudioClip:
AudioClip clip = getAudioClip(getCodeBase(), "welcome.wav");
Апплет WhaleSounds демонстрирует создание объекта AudioClip, а также запуск и остановку звука при помощи класса JButtons и соответствующих методов. Для создания данного апплета вам необходимо загрузить содержимое следующих гиперссылок:
- Исходный код WhaleSounds.java и WhaleSounds.html
- Аудио клип humpback.au
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class WhaleSounds extends JApplet {
AudioClip clip;
public void init() {
clip = getAudioClip(getCodeBase(), "humpback.au");
JButton play = new JButton("Play");
JButton stop = new JButton("Stop");
Container pane = getContentPane();
pane.setLayout(new GridLayout(2, 1));
pane.add(play);
pane.add(stop);
play.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
clip.play();
}
});
stop.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
clip.stop();
}
});
}
}
После компиляции и запуска апплета вы должны увидеть следующее:

Класс JSlider
Объект Slider (ползунок) позволяет пользователям изменять числовое значение указанного параметра при помощи визуальных средств. При этом устанавливаются ограничители максимума и минимума. Примерами могут служить настройка громкости, яркости цвета, изменение размера объектов и так далее.
Для этого в поставку Java API входит специальный класс, позволяющий разработчикам создавать настраиваемые ползунки в соответствии с конкретными требованиями приложений. Данный класс находится в библиотеке Swing (javax.swing.JSlider).
При помощи ползункового механизма можно отобразить любой диапазон числовых значений, и изменять значение, перемещая указатель между его границами.
Создать объект Slider можно при помощи одного из данных конструкторов:
JSlider()
Создает горизонтальный ползунок в диапазоне от 0 до 100 с начальным значением равным 50.
JSlider(int min, int max)
JSlider(int min, int max, int value)
Создает горизонтальный ползунок с заданными максимальным и минимальным значениями. Если присутствует третий аргумент int, он указывает на начальное значение указателя.
JSlider(BoundedRangeModel)
Создает горизонтальный ползунок определенной модели, управляющей минимальным и максимальным значениями, а также текущими значениями и их взаимодействием.
Изменять и устанавливать метки, деления и расположение ползунка на плоскости можно при помощи многочисленных методов класса JSlider. Вот некоторые из них:
void setMinimum(int)
void setMaximum(int)
Устанавливает минимальное и максимальное значения ползунка. При совместном использовании этих методов можно установить или извлечь диапазон значений ползунка.
void setPaintTicks(boolean)
Проверяет, отмечены ли на ползунке деления.
Добавить дополнительные функции к ползунку можно, реализовав интерфейс ChangeListener и обеспечив метод stateChanged, указав в них точные инструкции для действий, выполняемых при перемещении ползунка.
В представленной далее программе проиллюстрировано использование конструктора JSlider, а также методов для создания вертикального и горизонтального ползунков. При перемещении указателя ползунка вызывается метод stateChanged, а значение, указывающее на позицию ползунка, отображается в текстовой области внизу экрана.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
public class JSliderExample extends JFrame {
JSlider jsHorizontal;
JSlider jsVertical;
JTextField jtf1;
JTextField jtf2;
public JSliderExample() {
// Создать горизонтальный ползунок
// с различными параметрами
jsHorizontal = new JSlider(JSlider.HORIZONTAL, 0, 100, 50);
jsHorizontal.setMajorTickSpacing(20);
jsHorizontal.setMinorTickSpacing(5);
jsHorizontal.setPaintTicks(true);
jsHorizontal.setPaintLabels(true);
jsHorizontal.setForeground(Color.BLACK);
jsHorizontal.setBorder(BorderFactory.createEtchedBorder());
jsHorizontal.addChangeListener(new JSliderHandler());
// Создать вертикальный ползунок
// с различными параметрами
jsVertical = new JSlider(JSlider.VERTICAL, 0, 40, 8);
jsVertical.setMajorTickSpacing(10);
jsVertical.setMinorTickSpacing(2);
jsVertical.setPaintTicks(true);
jsVertical.setPaintLabels(true);
jsVertical.setForeground(Color.BLACK);
jsVertical.setBorder(BorderFactory.createEtchedBorder());
jsVertical.addChangeListener(new JSliderHandler());
// Создать текстовое поле
// для отображения позиции указателя
jtf1 = new JTextField(15);
jtf2 = new JTextField(15);
jtf1.setEditable(false);
jtf2.setEditable(false);
jtf1.setText("Horizontal value is " + jsHorizontal.getValue());
jtf2.setText("Vertical value is " + jsVertical.getValue());
JPanel p1 = new JPanel();
p1.setBackground(Color.WHITE);
p1.add(jsHorizontal);
JPanel p2 = new JPanel();
p2.setBackground(Color.WHITE);
p2.add(jtf1);
p2.add(jtf2);
JPanel p3 = new JPanel();
p3.setBackground(Color.WHITE);
p3.add(jsVertical);
getContentPane().add(p1, BorderLayout.CENTER);
getContentPane().add(p2, BorderLayout.SOUTH);
getContentPane().add(p3, BorderLayout.EAST);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(300, 400, 400, 300);
setVisible(true);
setBackground(Color.WHITE);
}
// Закрыть конструктор
class JSliderHandler implements ChangeListener {
public void stateChanged(ChangeEvent ce) {
jtf1.setText("Horizontal value is " + jsHorizontal.getValue());
jtf2.setText("Vertical value is " + jsVertical.getValue());
}
}
public static void main(String args[]) {
JSliderExample jse = new JSliderExample();
}
}
Апплет JSliderExample.java выводит на экран следующее:

Программа ColorChanger
Создайте приложение ColorChanger.
- Создайте программу, позволяющую пользователю устанавливать фоновый цвет метки, изменяя значения его составляющих при помощи трех ползунков:
- Red (красный)
- Green (зеленый)
- Blue (голубой)
- Установите две кнопки для изменения цвета на более светлый или темный. При нажатии на одну из них фоновый цвет должен изменяться, а указатели движков перемещаться на новое значение.
Ссылки
Class Color (класс Corol)
Class JSlider (класс JSider)
How to Use Sliders (использование ползункового механизма)
Interface AudioClip (интерфейс AudioClip)