2. Что такое графическая библиотека классов?
3. Что называется графическим компонентом?
4. Назовите известные вам графические компоненты.
5. Что такое контейнер в графическом интерфейсе?
6. Будет ли основное окно приложения контейнером?
7. Можно ли использовать библиотеку Swing без библиотеки AWT?
8. Какая разница между компонентами AWT и компонентами Swing?
9. Можно ли совсем отказаться от компонентов библиотеки AWT?
ГЛАВА 9
Графические примитивы
При создании графического компонента, т. е. объекта класса Component, автоматически формируется его
В контексте определена система координат, начало которой — точка с координатами (0, 0) — расположено в верхнем левом углу области рисования, ось
Управляет контекстом класс Graphics или более новый класс Graphics2D, созданный в рамках библиотеки Java 2D. Поскольку графический контекст сильно зависит от конкретной графической платформы, эти классы сделаны абстрактными. Поэтому нельзя непосредственно создать экземпляры класса Graphics или Graphics2D.
Однако каждая виртуальная машина Java реализует методы этих классов, создает их экземпляры для компонента и предоставляет объект класса Graphics методом getGraphics ( ) класса Component или передает его как аргумент методов paint () и update ().
Посмотрим сначала, какие методы работы с графикой и текстом предоставляет нам класс Graphics.
Методы класса
При создании контекста в нем задается текущий цвет для рисования, обычно черный, и цвет фона области рисования — белый или серый. Изменить текущий цвет можно методом setColor (Color newColor), аргумент newColor которого — объект класса Color.
Узнать текущий цвет можно методом getColor ( ), возвращающим объект класса Color.
Цвет, как и все в Java, — объект определенного класса, а именно класса Color. Основу класса составляют семь конструкторов цвета.
Самый простой конструктор,
Color(int red, int green, int blue);
создает цвет, получающийся как смесь красной red, зеленой green и синей blue составляющих. Эта цветовая модель называется RGB. Каждая составляющая меняется от 0 (отсутствие составляющей цвета) до 255 (полная интенсивность этой составляющей цвета). Например, следующие строки:
Color pureRed = new Color(255, 0, 0);
Color pureGreen = new Color(0, 255, 0);
определяют чистый ярко-красный цвет pureRed и чистый ярко-зеленый цвет pureGreen.
Во втором конструкторе интенсивность составляющих можно изменять более гладко вещественными числами от 0.0 (отсутствие составляющей) до 1.0 (полная интенсивность составляющей):
Color(float red, float green, float blue);
Например:
Color someColor = new Color(0.05f, 0.4f, 0.95f);
Третий конструктор,
Color(int rgb);
задает все три составляющие в одном целом числе. В битах 16—23 записывается красная составляющая, в битах 8—15 — зеленая, а в битах 0—7 — синяя составляющая цвета. Например:
Color c = new Color(0xFF8F48AF);
Здесь красная составляющая задана с интенсивностью 0x8F, зеленая — 0x4 8, синяя —
0xAF .
Следующие три конструктора:
Color(int red, int green, int blue, int alpha);
Color(float red, float green, float blue, float alpha);
Color(int rgb, boolean hasAlpha);
вводят четвертую составляющую цвета, так называемую
Последний из этих конструкторов учитывает альфа-составляющую, находящуюся в битах 24—31, если параметр hasAlpha равен true. Если же hasAlpha равно false, то составляющая альфа считается равной 255, независимо от того, что записано в старших битах параметра rgb.
Можно сказать, что первые три конструктора создают непрозрачный цвет с альфой, равной 255 или 1.0.
Седьмой конструктор,
Color(ColorSpace cspace, float[] components, float alpha);
позволяет создавать цвет не только в
Для создания цвета в модели HSB можно воспользоваться статическим методом
getHSBColor(float hue, float saturation, float brightness);