Как создавать цвета

Добавлено : 28 Dec 2008, 14:46

Содержание

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 и соответствующих методов. Для создания данного апплета вам необходимо загрузить содержимое следующих гиперссылок:

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.

  1. Создайте программу, позволяющую пользователю устанавливать фоновый цвет метки, изменяя значения его составляющих при помощи трех ползунков:
    • Red (красный)
    • Green (зеленый)
    • Blue (голубой)
  2. Установите две кнопки для изменения цвета на более светлый или темный. При нажатии на одну из них фоновый цвет должен изменяться, а указатели движков перемещаться на новое значение.
Возможное решение задачи.

Ссылки

Class Color (класс Corol)

Class JSlider (класс JSider)

How to Use Sliders (использование ползункового механизма)

Interface AudioClip (интерфейс AudioClip)

Теги: colors java api JSlider