SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
Апплеты Java
Апплеты - это программы, которые размещаются на серверах Internet,
транспортируются клиенту по сети, автоматически устанавливаются и запускаются на
месте, как часть документа HTML. Когда апплет прибывает к клиенту, его доступ к
ресурсам клиентской машины ограничен.
Каноническая программа HelloWorld,
оформленная в виде апплета
import java.awt.*;
import java.applet.*;
public class HelloWorldApplet extends Applet {
public void paint(Graphics g) {
g.drawString("Hello World!", 20, 20);
}
}

Любой апплет должен содержать импорт
классов из пакетов java.applet и java.awt.
Метод paint, замещающий одноименный
метод класса Applet – аналог метода main
для приложений. При вызове метода paint
ему передается аргумент, содержащий
ссылку на объект класса Graphics, который
используется для прорисовки апплета.
С помощью метода drawString,
вызываемого с объектом типа Graphics, в
позиции экрана (20,20) выводится строка
“Hello World!”.

Для того, чтобы запустить оттранслированный апплет с помощью браузера, необходимо написать
html-текст:
<applet code="HelloWorldApplet" width=200 height=40>
</applet>
и поместить его в отдельный html-файл (например, HelloWorldApplet.html).
1
Для того, чтобы апплеты воспроизводились, браузер должен иметь соответствующие плагины для
среды выполнения (JRE).
Апплеты Java
Помимо этого, для отладки апплетов в среде разработки SDK имеется утилита appletviewer.
Для запуска апплета с помощью утилиты appletviewer необходимо вставить в текст апплета в виде
комментария html-код и запустить в командной строке: аppletviewer HelloWorldApplet.java
// <applet code="Primer08" width=400 height=200>
// </applet>

import java.applet.*;
import java.awt.*;
public class Primer08 extends Applet {
public void paint(Graphics theG) {
String ss = "Hello, my first applet!";
String sss = " ";
theG.drawOval(15, 20, 270, 55);
for (int i = 1; i < ss.length(); i++) {
sss = ss.substring(i-1, i);
theG.drawString(sss, 20 + i*10, 50);
sss=" ";
for (int j=0; j < 10000000; j++) { };
}
sss = ss.substring(ss.length()-1, ss.length());
theG.drawString(sss, 20 + ss.length()*10, 50);
for (int j=0; j < 100000000; j++) { };
theG.fillOval(15, 20, 270, 55);
}
}

Данный апплет рисует овал, затем
побуквенно рисует в овале текст
«Hello, my first applet!». После этого
закрашивает овал цветом по
умолчанию (черным).

2
Апплеты Java
Методы, которые управляют созданием и выполнением апплета на Web-странице:

Операция
Метод
init( )

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

start( )

Вызывается каждый раз, когда апплет переносится в поле зрения Web броузера,
чтобы позволить апплету начать нормальные операции (особенно те, которые
останавливаются в методе stop( )). Также вызывается после init( ).

update()

Используемый по умолчанию метод update класса Applet сначала закрашивает
апплет цветом фона по умолчанию, после чего вызывает метод paint. Если вы в
методе paint заполняете фон другим цветом, пользователь будет видеть вспышку
цвета по умолчанию при каждом вызове метода update - то есть, всякий раз, когда
вы перерисовываете апплет. Чтобы избежать этого, нужно заместить метод
update. В общем случае нужно выполнять операции рисования в методе update, а
в методе paint, к которому будет обращаться AWT, просто вызвать update.

stop( )

Вызывается каждый раз, когда апплет выходит из поля зрения Web броузера,
чтобы позволить апплету завершить дорогостоящие операции. Также вызывается
перед destroy( ).

destroy( )

Вызывается тогда, когда апплет начинает выгружаться со страницы для
выполнения финального освобождения ресурсов, когда апплет более не
3
используется.
Апплеты Java
Перерисовка
Возвратимся к апплету HelloWorldApplet. В нем мы заместили метод paint, что
позволило апплету выполнить отрисовку. В классе Applet предусмотрены
дополнительные методы рисования, позволяющие эффективно закрашивать части
экрана. При разработке первых апплетов порой непросто понять, почему метод update
никогда не вызывается. Для инициации update предусмотрены три варианта метода
repaint.
repaint()
Метод repaint используется для принудительного перерисовывания апплета. Этот
метод, в свою очередь, вызывает метод update. Однако, если ваша система медленная
или сильно загружена, метод update может и не вызваться. Близкие по времени
запросы на перерисовку могут объединяться AWT, так что метод update может
вызываться спорадически. Если вы хотите добиться ритмичной смены кадров
изображения, воспользуйтесь методом repaint(time) - это позволит уменьшить
количество кадров, нарисованных не вовремя.
repaint(time)
Вы можете вызывать метод repaint, устанавливая крайний срок для перерисовки (этот
период задается в миллисекундах относительно времени вызова repaint).
repaint(x, y, w, h)
Эта версия ограничивает обновление экрана заданным прямоугольником, изменены
будут только те части экрана, которые в нем находятся.
repaint(time, x, у, w, h)
Этот метод - комбинация двух предыдущих.
4
Апплеты Java
Простые методы класса Graphics
У объектов класса Graphics есть несколько простых функций рисования. Каждую из фигур можно
нарисовать заполненной, либо прорисовать только ее границы.
drawRect(int x, int y, int width и int height) и fillRect(int x, int y, int width и int height) рисуют
(заполняют цветом) прямоугольники.
drawOval(int x, int y, int width и int height) и fillOval(int x, int y, int width и int height) рисуют
(заполняют цветом) овалы.
Координаты х и у задают положение верхнего левого угла фигуры, параметры width и height
определяют ее границы.
drawLine(int x1, int у1, int х2, int у2)
Этот метод вычерчивает отрезок прямой между точками с координатами (х1,у1) и (х2,у2). Эти линии
представляют собой простые прямые толщиной в 1 пиксель. Поддержка разных перьев и разных
толщин линий не предусмотрена.
drawArc(int x, int у, int width, int height, int startAngle, int sweepAngle)
Эти методы вычерчивают (fillArc заполняет) дугу, ограниченную прямоугольником (x, y, width, height),
начинающуюся с угла startAngle и имеющую угловой размер sweepAngle. Ноль градусов соответствует
положению часовой стрелки на 3 часа, угол отсчитывается против часовой стрелки (например, 90
градусов соответствуют 12 часам, 180 - 9 часам, и так далее).
drawPolygon(int[], int[], int) и fillPolygon(int[], int[], int)
Метод drawPolygon рисует контур многоугольника (ломаную линию), задаваемого двумя массивами,
содержащими х и у координаты вершин, третий параметр метода - число пар координат. Метод
drawPolygon не замыкает автоматически вычерчиваемый контур. Для того, чтобы прямоугольник 5
получился замкнутым, координаты первой и последней точек должны совпадать.
Апплеты Java
Цвет
Цветовая система AWT дает возможность работы со всеми цветами. После того, как цвет задан, Java
отыскивает в диапазоне цветов дисплея тот, который ему больше всего соответствует. Цвета
задаются - как смесь красного, зеленого и голубого (RGB), либо как комбинация оттенка,
насыщенности и яркости (HSB). Можно использовать статические переменные класса Color для
задания какого-либо из общеупотребительных цветов - black, white, red, green, blue, cyan, yellow,
magenta, orange, pink, gray, darkGray и lightGray. Конструкторы:
Color(int, int, int)
Параметрами для этого конструктора являются три целых числа в диапазоне от 0 до 255 для
красного, зеленого и голубого компонентов цвета (модель RGB).
Color(int)
У этого конструктора - один целочисленный аргумент, в котором в упакованном виде заданы красный,
зеленый и голубой компоненты цвета (модель RGB). Красный занимает биты 16-23, зеленый - 8-15,
голубой - 0-7.
Color(float, float, float)
Последний из конструкторов цвета принимает в качестве параметров три значения типа float (в
диапазоне от 0.0 до 1.0) для оттенка, насыщенности и яркости (модель HSB).
Методы класса Color
HSBtoRGB(float, float, float) и RGBtoHSB(int, int, int, float[])
HSBtoRGB() преобразует цвет, заданный оттенком, насыщенностью и яркостью (HSB), в целое число
в формате RGB, готовое для использования в качестве параметра конструктора Color(int).
RGBtoHSB() преобразует цвет, заданный тремя базовыми компонентами, в массив типа float со
значениями HSB, соответствующими данному цвету.
Примечаение. Цветовая модель HSB (Hue-Saturation-Brightness, оттенок-насыщенность-яркость) является
альтернативой модели Red-Green-Blue для задания цветов. В этой модели оттенки можно представить как круг с
различными цветами (оттенок может принимать значения от 0.0 до 1.0, цвета на этом круге идут в том же порядке, что и
в радуге - красный, оранжевый, желтый, зеленый, голубой, синий, фиолетовый). Насыщенность (значение в диапазоне
6
от 0.0 до 1.0) - это шкала глубины цвета, от легкой пастели до сочных цветов. Яркость - это также число в диапазоне от
0.0 до 1.0, причем меньшие значения соответствуют более темным цветам, а большие - более ярким.
Апплеты Java
drawString
Метод выводит строку с использованием текущих шрифта и цвета. Точка с координатами (х,у)
соответствует левой границе базовой линии символов, а не левому верхнему углу, как это принято в
других методах рисования.
Использование шрифтов
Конструктор класса Font создает новый шрифт с указанным именем, стилем и размером в пунктах:
Font strongFont = new Font("Helvetica", Font.BOLD|Font.ITALIC, 24);
В настоящее время доступны следующие имена шрифтов: Dialog, Helvetica, TimesRoman, Courier и
Symbol. Для указания стиля шрифта внутри данного семейства предусмотрены три статические
переменные - Font.PLAIN, Font.BOLD и Font.ITALIC, что соответствует обычному стилю, курсиву и
полужирному.
Методы класса Font.
getFamily и getName
Метод getFamily возвращает строку с именем семейства шрифтов. С помощью метода getName
можно получить логическое имя шрифта.
getSize
Этот метод возвращает целое число, представляющее собой размер шрифта в пунктах.
getStyle
Этот метод возвращает целое число, соответствующее стилю шрифта. Полученный результат можно
побитово сравнить со статическими переменными класса Font: - PLAIN, BOLD и ITALIC.
isBold, isItalic, isPlain
Эти методы возвращают true в том случае, если стиль шрифта - полужирный (bold), курсив (italic) или
обычный (plain), соответственно.
7
Апплеты Java и библиотека оконного интерфейса
Разработка апплетов тесно связана с возможностями визуализации графических
образов в многооконном режиме. Сам класс Applet является подклассом более общего
класса Panel библиотеки оконного интерфейса. При этом, как и все в Java,
разрабатываемые классы оконной графики должны быть независимыми от
платформы.
Библиотека графических образов, независимая от платформы, должна состоять из приложений
(классов), которые:

- Либо ведут себя и выглядят на всех платформах одинаково,
- Либо написаны с учетом всех возможных разновидностей интерфейса.

Существуют два взгляда на эту проблему.
Первый подход опирается на разработку графики низкого уровня, т.е. прорисовку пикселей, при
этом разработчики библиотеки сами заботятся о внешнем виде каждого компонента.

Другой подход создает абстракции, подходящие для библиотек каждой из операционных систем, и
именно “родные” пакеты данной операционной системы служат «подъемной» силой для
архитектурно-нейтральной библиотеки на каждой из платформ.

В Java при создании библиотеки оконного интерфейса Abstraction Window Toolkit
(AWT) был выбран второй подход.
В настоящее время разработана улучшенная версия библиотеки AWT под названием
Java Swing, в которой все классы AWT также работают. Названия классов AWT и Swing
схожи, в основном отличаются начальной буквой имен классов является “J”:
Applet  JApplet ; Label  JLabel ; etc.

8
Библиотека оконного интерфейса. Основные компоненты.
Компоненты
Component - это основной абстрактный класс, который инкапсулирует (включает в себя) все
атрибуты визуального интерфейса - обработка ввода с клавиатуры, управление фокусом,
взаимодействие с мышью, уведомление о входе/выходе из окна, изменения размеров и положения
окон, прорисовка своего собственного графического представления, сохранение текущего текстового
шрифта, цветов фона и переднего плана (более 10 методов).
Подклассы Component.
Container
Container - это абстрактный подкласс класса Component, определяющий дополнительные методы,
которые дают возможность помещать в него другие компоненты, что дает возможность построения
иерархической системы визуальных объектов. Container отвечает за расположение содержащихся в
нем компонентов с помощью интерфейса LayoutManager, описание которого будет позднее в этой
главе.
Panel
Класс Panel - это очень простая специализация класса Container. В отличие от последнего, он не
является абстрактным классом. Поэтому о Panel можно думать, как о допускающем рекурсивную
вложенность экранном компоненте. С помощью метода add в объекты Panel можно добавлять другие
компоненты. После того, как в него добавлены какие-либо компоненты, можно вручную задавать их
положение и изменять размер с помощью методов move, resize и reshape класса Component.
Класс Applet - один из подклассов Panel. Каждый раз, когда мы создается Applet, методы paint и
update рисуют его изображение на поверхности объекта Panel.
9
Библиотека оконного интерфейса. Основные компоненты.
Прежде, чем мы углубимся в методы Panel, давайте познакомимся с компонентом Canvas, который
можно вставлять в пустую Panel при работе с объектом Applet.

10
Библиотека оконного интерфейса. Основные компоненты.

11
Библиотека оконного интерфейса. Основные компоненты.

12
Библиотека оконного интерфейса. Основные компоненты.

13
Библиотека оконного интерфейса. Основные компоненты.

14
Библиотека оконного интерфейса. Основные компоненты.

15
Библиотека оконного интерфейса. Основные компоненты.

16
Библиотека оконного интерфейса. Основные компоненты.

17
Апплеты Java и библиотека оконного интерфейса

Механизм запуска апплетов и элементов оконной графики
из командной строки заключается в следующем:
1. Создать с помощью метода init() компоновку элементов
апплета;
2. В методе main() создать экземпляр разработанного апплета,
3. Добавить все описанные элементы в рабочую область
апплета,
4. Выполнить методы init() и start() применительно к
созданному экземпляру апплета,
5. Визуализировать все действия,
6. Нормально выйти из приложения (из метода main()) при
закрытии окна апплета.
18
Апплеты Java и библиотека оконного интерфейса

Пример (Брюс Эккель, «Философия Java»).
Подключение библиотек Swing, AWT и
авторского пакета Б.Эккеля

//: c13:Applet1c.java
// Приложение и апплет.
// <applet code=Applet1c width=100 height=50>
Объявление класса и вызов метода init(),
// </applet>
который размещает методом add() в рабочее
import javax.swing.*;
пространство getContentPane() визуальный
import java.awt.*;
элемент строковая метка JLabel.
import com.bruceeckel.swing.*;
public class Applet1c extends JApplet {
Объявление и создание экземпляра апплета
public void init() {
и создание рамки (экземпляр класса JFrame)
getContentPane().add(new JLabel("Applet!"));
}
// main() для приложения:
Авторская разработка Б.Эккеля,
public static void main(String[ ] args) {
позволяющая нормально выйти из
JApplet applet = new Applet1c();
приложения после закрытия рамки frame.
JFrame frame = new JFrame("Applet1c");
// Для закрытия приложения:
Console.setupClosing(frame);
Добавление апплета в рабочее пространство рамки, тем
frame.getContentPane().add(applet);
самым связываются события, происходящие с рамкой, с
frame.setSize(100,50);
работой апплета;
applet.init();
applet.start();
Определение размеров рамки;
frame.setVisible(true);
Запуск апплета;
}
19
}
Все изменения апплета в рамке становятся видимыми.
Апплеты Java и библиотека оконного интерфейса

Подробности создания апплетов и
элементов оконного интерфейса
читайте на учебном сайте
http://potor.baikal.ru
(Лекция 15)

20

Contenu connexe

Similaire à 278660

создание растровых изображений
создание растровых изображенийсоздание растровых изображений
создание растровых изображенийDmitry Kulikov
 
графические возможности паскаль
графические возможности паскальграфические возможности паскаль
графические возможности паскальIrina Trofimovich
 
графические возможности паскаль
графические возможности паскальграфические возможности паскаль
графические возможности паскальIrina Trofimovich
 
Параллельные алгоритмы обработки данных
Параллельные алгоритмы обработки данныхПараллельные алгоритмы обработки данных
Параллельные алгоритмы обработки данныхSergey Vasilyev
 
оп.05 основы программирования
оп.05 основы программированияоп.05 основы программирования
оп.05 основы программированияStepan1234
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.sharikdp
 
Растровая графика
Растровая графикаРастровая графика
Растровая графикаstudpro
 
Методы построения и анализа алгоритмов
Методы построения и анализа алгоритмовМетоды построения и анализа алгоритмов
Методы построения и анализа алгоритмовNick535
 
тема множество для загрузки 2013
тема множество для загрузки 2013тема множество для загрузки 2013
тема множество для загрузки 2013AliyaAringazinova
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1Michael Karpov
 
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...Mikhail Kurnosov
 
введение
введениевведение
введениеAndEdr
 
«Анимация в PascalABC»
«Анимация в PascalABC»«Анимация в PascalABC»
«Анимация в PascalABC»ValiaKuba
 
якобовский - введение в параллельное программирование (1)
якобовский - введение в параллельное программирование (1)якобовский - введение в параллельное программирование (1)
якобовский - введение в параллельное программирование (1)Michael Karpov
 
Графика средствами PHP
Графика средствами PHPГрафика средствами PHP
Графика средствами PHPVasya Petrov
 
Графика средствами PHP
Графика средствами PHPГрафика средствами PHP
Графика средствами PHPVasya Petrov
 

Similaire à 278660 (20)

создание растровых изображений
создание растровых изображенийсоздание растровых изображений
создание растровых изображений
 
графические возможности паскаль
графические возможности паскальграфические возможности паскаль
графические возможности паскаль
 
графические возможности паскаль
графические возможности паскальграфические возможности паскаль
графические возможности паскаль
 
Параллельные алгоритмы обработки данных
Параллельные алгоритмы обработки данныхПараллельные алгоритмы обработки данных
Параллельные алгоритмы обработки данных
 
оп.05 основы программирования
оп.05 основы программированияоп.05 основы программирования
оп.05 основы программирования
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.
 
презентация1
презентация1презентация1
презентация1
 
Растровая графика
Растровая графикаРастровая графика
Растровая графика
 
Методы построения и анализа алгоритмов
Методы построения и анализа алгоритмовМетоды построения и анализа алгоритмов
Методы построения и анализа алгоритмов
 
лр1
лр1лр1
лр1
 
тема множество для загрузки 2013
тема множество для загрузки 2013тема множество для загрузки 2013
тема множество для загрузки 2013
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1
 
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
 
введение
введениевведение
введение
 
графические возможности языка программирования
графические возможности языка программированияграфические возможности языка программирования
графические возможности языка программирования
 
«Анимация в PascalABC»
«Анимация в PascalABC»«Анимация в PascalABC»
«Анимация в PascalABC»
 
Javascript 1
Javascript 1Javascript 1
Javascript 1
 
якобовский - введение в параллельное программирование (1)
якобовский - введение в параллельное программирование (1)якобовский - введение в параллельное программирование (1)
якобовский - введение в параллельное программирование (1)
 
Графика средствами PHP
Графика средствами PHPГрафика средствами PHP
Графика средствами PHP
 
Графика средствами PHP
Графика средствами PHPГрафика средствами PHP
Графика средствами PHP
 

278660

  • 1. Апплеты Java Апплеты - это программы, которые размещаются на серверах Internet, транспортируются клиенту по сети, автоматически устанавливаются и запускаются на месте, как часть документа HTML. Когда апплет прибывает к клиенту, его доступ к ресурсам клиентской машины ограничен. Каноническая программа HelloWorld, оформленная в виде апплета import java.awt.*; import java.applet.*; public class HelloWorldApplet extends Applet { public void paint(Graphics g) { g.drawString("Hello World!", 20, 20); } } Любой апплет должен содержать импорт классов из пакетов java.applet и java.awt. Метод paint, замещающий одноименный метод класса Applet – аналог метода main для приложений. При вызове метода paint ему передается аргумент, содержащий ссылку на объект класса Graphics, который используется для прорисовки апплета. С помощью метода drawString, вызываемого с объектом типа Graphics, в позиции экрана (20,20) выводится строка “Hello World!”. Для того, чтобы запустить оттранслированный апплет с помощью браузера, необходимо написать html-текст: <applet code="HelloWorldApplet" width=200 height=40> </applet> и поместить его в отдельный html-файл (например, HelloWorldApplet.html). 1 Для того, чтобы апплеты воспроизводились, браузер должен иметь соответствующие плагины для среды выполнения (JRE).
  • 2. Апплеты Java Помимо этого, для отладки апплетов в среде разработки SDK имеется утилита appletviewer. Для запуска апплета с помощью утилиты appletviewer необходимо вставить в текст апплета в виде комментария html-код и запустить в командной строке: аppletviewer HelloWorldApplet.java // <applet code="Primer08" width=400 height=200> // </applet> import java.applet.*; import java.awt.*; public class Primer08 extends Applet { public void paint(Graphics theG) { String ss = "Hello, my first applet!"; String sss = " "; theG.drawOval(15, 20, 270, 55); for (int i = 1; i < ss.length(); i++) { sss = ss.substring(i-1, i); theG.drawString(sss, 20 + i*10, 50); sss=" "; for (int j=0; j < 10000000; j++) { }; } sss = ss.substring(ss.length()-1, ss.length()); theG.drawString(sss, 20 + ss.length()*10, 50); for (int j=0; j < 100000000; j++) { }; theG.fillOval(15, 20, 270, 55); } } Данный апплет рисует овал, затем побуквенно рисует в овале текст «Hello, my first applet!». После этого закрашивает овал цветом по умолчанию (черным). 2
  • 3. Апплеты Java Методы, которые управляют созданием и выполнением апплета на Web-странице: Операция Метод init( ) Автоматически вызывается для выполнения начальной инициализации апплета, включая компоновку всех составляющих элементов окна. Этот метод всегда перегружается. start( ) Вызывается каждый раз, когда апплет переносится в поле зрения Web броузера, чтобы позволить апплету начать нормальные операции (особенно те, которые останавливаются в методе stop( )). Также вызывается после init( ). update() Используемый по умолчанию метод update класса Applet сначала закрашивает апплет цветом фона по умолчанию, после чего вызывает метод paint. Если вы в методе paint заполняете фон другим цветом, пользователь будет видеть вспышку цвета по умолчанию при каждом вызове метода update - то есть, всякий раз, когда вы перерисовываете апплет. Чтобы избежать этого, нужно заместить метод update. В общем случае нужно выполнять операции рисования в методе update, а в методе paint, к которому будет обращаться AWT, просто вызвать update. stop( ) Вызывается каждый раз, когда апплет выходит из поля зрения Web броузера, чтобы позволить апплету завершить дорогостоящие операции. Также вызывается перед destroy( ). destroy( ) Вызывается тогда, когда апплет начинает выгружаться со страницы для выполнения финального освобождения ресурсов, когда апплет более не 3 используется.
  • 4. Апплеты Java Перерисовка Возвратимся к апплету HelloWorldApplet. В нем мы заместили метод paint, что позволило апплету выполнить отрисовку. В классе Applet предусмотрены дополнительные методы рисования, позволяющие эффективно закрашивать части экрана. При разработке первых апплетов порой непросто понять, почему метод update никогда не вызывается. Для инициации update предусмотрены три варианта метода repaint. repaint() Метод repaint используется для принудительного перерисовывания апплета. Этот метод, в свою очередь, вызывает метод update. Однако, если ваша система медленная или сильно загружена, метод update может и не вызваться. Близкие по времени запросы на перерисовку могут объединяться AWT, так что метод update может вызываться спорадически. Если вы хотите добиться ритмичной смены кадров изображения, воспользуйтесь методом repaint(time) - это позволит уменьшить количество кадров, нарисованных не вовремя. repaint(time) Вы можете вызывать метод repaint, устанавливая крайний срок для перерисовки (этот период задается в миллисекундах относительно времени вызова repaint). repaint(x, y, w, h) Эта версия ограничивает обновление экрана заданным прямоугольником, изменены будут только те части экрана, которые в нем находятся. repaint(time, x, у, w, h) Этот метод - комбинация двух предыдущих. 4
  • 5. Апплеты Java Простые методы класса Graphics У объектов класса Graphics есть несколько простых функций рисования. Каждую из фигур можно нарисовать заполненной, либо прорисовать только ее границы. drawRect(int x, int y, int width и int height) и fillRect(int x, int y, int width и int height) рисуют (заполняют цветом) прямоугольники. drawOval(int x, int y, int width и int height) и fillOval(int x, int y, int width и int height) рисуют (заполняют цветом) овалы. Координаты х и у задают положение верхнего левого угла фигуры, параметры width и height определяют ее границы. drawLine(int x1, int у1, int х2, int у2) Этот метод вычерчивает отрезок прямой между точками с координатами (х1,у1) и (х2,у2). Эти линии представляют собой простые прямые толщиной в 1 пиксель. Поддержка разных перьев и разных толщин линий не предусмотрена. drawArc(int x, int у, int width, int height, int startAngle, int sweepAngle) Эти методы вычерчивают (fillArc заполняет) дугу, ограниченную прямоугольником (x, y, width, height), начинающуюся с угла startAngle и имеющую угловой размер sweepAngle. Ноль градусов соответствует положению часовой стрелки на 3 часа, угол отсчитывается против часовой стрелки (например, 90 градусов соответствуют 12 часам, 180 - 9 часам, и так далее). drawPolygon(int[], int[], int) и fillPolygon(int[], int[], int) Метод drawPolygon рисует контур многоугольника (ломаную линию), задаваемого двумя массивами, содержащими х и у координаты вершин, третий параметр метода - число пар координат. Метод drawPolygon не замыкает автоматически вычерчиваемый контур. Для того, чтобы прямоугольник 5 получился замкнутым, координаты первой и последней точек должны совпадать.
  • 6. Апплеты Java Цвет Цветовая система AWT дает возможность работы со всеми цветами. После того, как цвет задан, Java отыскивает в диапазоне цветов дисплея тот, который ему больше всего соответствует. Цвета задаются - как смесь красного, зеленого и голубого (RGB), либо как комбинация оттенка, насыщенности и яркости (HSB). Можно использовать статические переменные класса Color для задания какого-либо из общеупотребительных цветов - black, white, red, green, blue, cyan, yellow, magenta, orange, pink, gray, darkGray и lightGray. Конструкторы: Color(int, int, int) Параметрами для этого конструктора являются три целых числа в диапазоне от 0 до 255 для красного, зеленого и голубого компонентов цвета (модель RGB). Color(int) У этого конструктора - один целочисленный аргумент, в котором в упакованном виде заданы красный, зеленый и голубой компоненты цвета (модель RGB). Красный занимает биты 16-23, зеленый - 8-15, голубой - 0-7. Color(float, float, float) Последний из конструкторов цвета принимает в качестве параметров три значения типа float (в диапазоне от 0.0 до 1.0) для оттенка, насыщенности и яркости (модель HSB). Методы класса Color HSBtoRGB(float, float, float) и RGBtoHSB(int, int, int, float[]) HSBtoRGB() преобразует цвет, заданный оттенком, насыщенностью и яркостью (HSB), в целое число в формате RGB, готовое для использования в качестве параметра конструктора Color(int). RGBtoHSB() преобразует цвет, заданный тремя базовыми компонентами, в массив типа float со значениями HSB, соответствующими данному цвету. Примечаение. Цветовая модель HSB (Hue-Saturation-Brightness, оттенок-насыщенность-яркость) является альтернативой модели Red-Green-Blue для задания цветов. В этой модели оттенки можно представить как круг с различными цветами (оттенок может принимать значения от 0.0 до 1.0, цвета на этом круге идут в том же порядке, что и в радуге - красный, оранжевый, желтый, зеленый, голубой, синий, фиолетовый). Насыщенность (значение в диапазоне 6 от 0.0 до 1.0) - это шкала глубины цвета, от легкой пастели до сочных цветов. Яркость - это также число в диапазоне от 0.0 до 1.0, причем меньшие значения соответствуют более темным цветам, а большие - более ярким.
  • 7. Апплеты Java drawString Метод выводит строку с использованием текущих шрифта и цвета. Точка с координатами (х,у) соответствует левой границе базовой линии символов, а не левому верхнему углу, как это принято в других методах рисования. Использование шрифтов Конструктор класса Font создает новый шрифт с указанным именем, стилем и размером в пунктах: Font strongFont = new Font("Helvetica", Font.BOLD|Font.ITALIC, 24); В настоящее время доступны следующие имена шрифтов: Dialog, Helvetica, TimesRoman, Courier и Symbol. Для указания стиля шрифта внутри данного семейства предусмотрены три статические переменные - Font.PLAIN, Font.BOLD и Font.ITALIC, что соответствует обычному стилю, курсиву и полужирному. Методы класса Font. getFamily и getName Метод getFamily возвращает строку с именем семейства шрифтов. С помощью метода getName можно получить логическое имя шрифта. getSize Этот метод возвращает целое число, представляющее собой размер шрифта в пунктах. getStyle Этот метод возвращает целое число, соответствующее стилю шрифта. Полученный результат можно побитово сравнить со статическими переменными класса Font: - PLAIN, BOLD и ITALIC. isBold, isItalic, isPlain Эти методы возвращают true в том случае, если стиль шрифта - полужирный (bold), курсив (italic) или обычный (plain), соответственно. 7
  • 8. Апплеты Java и библиотека оконного интерфейса Разработка апплетов тесно связана с возможностями визуализации графических образов в многооконном режиме. Сам класс Applet является подклассом более общего класса Panel библиотеки оконного интерфейса. При этом, как и все в Java, разрабатываемые классы оконной графики должны быть независимыми от платформы. Библиотека графических образов, независимая от платформы, должна состоять из приложений (классов), которые: - Либо ведут себя и выглядят на всех платформах одинаково, - Либо написаны с учетом всех возможных разновидностей интерфейса. Существуют два взгляда на эту проблему. Первый подход опирается на разработку графики низкого уровня, т.е. прорисовку пикселей, при этом разработчики библиотеки сами заботятся о внешнем виде каждого компонента. Другой подход создает абстракции, подходящие для библиотек каждой из операционных систем, и именно “родные” пакеты данной операционной системы служат «подъемной» силой для архитектурно-нейтральной библиотеки на каждой из платформ. В Java при создании библиотеки оконного интерфейса Abstraction Window Toolkit (AWT) был выбран второй подход. В настоящее время разработана улучшенная версия библиотеки AWT под названием Java Swing, в которой все классы AWT также работают. Названия классов AWT и Swing схожи, в основном отличаются начальной буквой имен классов является “J”: Applet  JApplet ; Label  JLabel ; etc. 8
  • 9. Библиотека оконного интерфейса. Основные компоненты. Компоненты Component - это основной абстрактный класс, который инкапсулирует (включает в себя) все атрибуты визуального интерфейса - обработка ввода с клавиатуры, управление фокусом, взаимодействие с мышью, уведомление о входе/выходе из окна, изменения размеров и положения окон, прорисовка своего собственного графического представления, сохранение текущего текстового шрифта, цветов фона и переднего плана (более 10 методов). Подклассы Component. Container Container - это абстрактный подкласс класса Component, определяющий дополнительные методы, которые дают возможность помещать в него другие компоненты, что дает возможность построения иерархической системы визуальных объектов. Container отвечает за расположение содержащихся в нем компонентов с помощью интерфейса LayoutManager, описание которого будет позднее в этой главе. Panel Класс Panel - это очень простая специализация класса Container. В отличие от последнего, он не является абстрактным классом. Поэтому о Panel можно думать, как о допускающем рекурсивную вложенность экранном компоненте. С помощью метода add в объекты Panel можно добавлять другие компоненты. После того, как в него добавлены какие-либо компоненты, можно вручную задавать их положение и изменять размер с помощью методов move, resize и reshape класса Component. Класс Applet - один из подклассов Panel. Каждый раз, когда мы создается Applet, методы paint и update рисуют его изображение на поверхности объекта Panel. 9
  • 10. Библиотека оконного интерфейса. Основные компоненты. Прежде, чем мы углубимся в методы Panel, давайте познакомимся с компонентом Canvas, который можно вставлять в пустую Panel при работе с объектом Applet. 10
  • 11. Библиотека оконного интерфейса. Основные компоненты. 11
  • 12. Библиотека оконного интерфейса. Основные компоненты. 12
  • 13. Библиотека оконного интерфейса. Основные компоненты. 13
  • 14. Библиотека оконного интерфейса. Основные компоненты. 14
  • 15. Библиотека оконного интерфейса. Основные компоненты. 15
  • 16. Библиотека оконного интерфейса. Основные компоненты. 16
  • 17. Библиотека оконного интерфейса. Основные компоненты. 17
  • 18. Апплеты Java и библиотека оконного интерфейса Механизм запуска апплетов и элементов оконной графики из командной строки заключается в следующем: 1. Создать с помощью метода init() компоновку элементов апплета; 2. В методе main() создать экземпляр разработанного апплета, 3. Добавить все описанные элементы в рабочую область апплета, 4. Выполнить методы init() и start() применительно к созданному экземпляру апплета, 5. Визуализировать все действия, 6. Нормально выйти из приложения (из метода main()) при закрытии окна апплета. 18
  • 19. Апплеты Java и библиотека оконного интерфейса Пример (Брюс Эккель, «Философия Java»). Подключение библиотек Swing, AWT и авторского пакета Б.Эккеля //: c13:Applet1c.java // Приложение и апплет. // <applet code=Applet1c width=100 height=50> Объявление класса и вызов метода init(), // </applet> который размещает методом add() в рабочее import javax.swing.*; пространство getContentPane() визуальный import java.awt.*; элемент строковая метка JLabel. import com.bruceeckel.swing.*; public class Applet1c extends JApplet { Объявление и создание экземпляра апплета public void init() { и создание рамки (экземпляр класса JFrame) getContentPane().add(new JLabel("Applet!")); } // main() для приложения: Авторская разработка Б.Эккеля, public static void main(String[ ] args) { позволяющая нормально выйти из JApplet applet = new Applet1c(); приложения после закрытия рамки frame. JFrame frame = new JFrame("Applet1c"); // Для закрытия приложения: Console.setupClosing(frame); Добавление апплета в рабочее пространство рамки, тем frame.getContentPane().add(applet); самым связываются события, происходящие с рамкой, с frame.setSize(100,50); работой апплета; applet.init(); applet.start(); Определение размеров рамки; frame.setVisible(true); Запуск апплета; } 19 } Все изменения апплета в рамке становятся видимыми.
  • 20. Апплеты Java и библиотека оконного интерфейса Подробности создания апплетов и элементов оконного интерфейса читайте на учебном сайте http://potor.baikal.ru (Лекция 15) 20