278660

20
1 Апплеты Апплеты Java Java Апплеты - это программы, которые размещаются на серверах Internet, транспортируются клиенту по сети, автоматически устанавливаются и запускаются на месте, как часть документа HTML. Когда апплет прибывает к клиенту, его доступ к ресурсам клиентской машины ограничен. import java.awt.*; import java.applet.*; public class HelloWorldApplet extends Applet { public void paint(Graphics g) { g.drawString("Hello World!", 20, 20); } } Каноническая программа HelloWorld, оформленная в виде апплета Любой апплет должен содержать импорт классов из пакетов 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). Для того, чтобы апплеты воспроизводились, браузер должен иметь соответствующие плагины для среды выполнения (JRE).

Upload: degestive

Post on 15-Jun-2015

195 views

Category:

Education


0 download

DESCRIPTION

java аплети

TRANSCRIPT

Page 1: 278660

1

Апплеты Апплеты JavaJavaАпплеты - это программы, которые размещаются на серверах Internet, транспортируются клиенту по сети, автоматически устанавливаются и запускаются на месте, как часть документа HTML. Когда апплет прибывает к клиенту, его доступ к ресурсам клиентской машины ограничен.

import java.awt.*;import java.applet.*;

public class HelloWorldApplet extends Applet {

public void paint(Graphics g) {

g.drawString("Hello World!", 20, 20);} }

Каноническая программа HelloWorld, оформленная в виде апплета

Любой апплет должен содержать импорт классов из пакетов 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).

Для того, чтобы апплеты воспроизводились, браузер должен иметь соответствующие плагины для среды выполнения (JRE).

Page 2: 278660

2

Апплеты Апплеты JavaJava

Помимо этого, для отладки апплетов в среде разработки 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!». После этого закрашивает овал цветом по умолчанию (черным).

Page 3: 278660

3

Апплеты Апплеты JavaJava

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

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

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

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

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

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

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

Page 4: 278660

4

Апплеты Апплеты JavaJava

ПерерисовкаВозвратимся к апплету 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)Этот метод - комбинация двух предыдущих.

Page 5: 278660

5

Апплеты Апплеты JavaJava

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

Page 6: 278660

6

Апплеты Апплеты JavaJava

ЦветЦветовая система 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). Методы класса ColorHSBtoRGB(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, цвета на этом круге идут в том же порядке, что и в радуге - красный, оранжевый, желтый, зеленый, голубой, синий, фиолетовый). Насыщенность (значение в диапазоне от 0.0 до 1.0) - это шкала глубины цвета, от легкой пастели до сочных цветов. Яркость - это также число в диапазоне от 0.0 до 1.0, причем меньшие значения соответствуют более темным цветам, а большие - более ярким.

Page 7: 278660

7

Апплеты Апплеты JavaJava

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), соответственно.

Page 8: 278660

8

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

Разработка апплетов тесно связана с возможностями визуализации графических образов в многооконном режиме. Сам класс Applet является подклассом более общего класса Panel библиотеки оконного интерфейса. При этом, как и все в Java, разрабатываемые классы оконной графики должны быть независимыми от платформы.

Библиотека графических образов, независимая от платформы, должна состоять из приложений (классов), которые:

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

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

Существуют два взгляда на эту проблему.

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

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

В Java при создании библиотеки оконного интерфейса Abstraction Window Toolkit (AWT) был выбран второй подход.

В настоящее время разработана улучшенная версия библиотеки AWT под названием Java Swing, в которой все классы AWT также работают. Названия классов AWT и Swing схожи, в основном отличаются начальной буквой имен классов является “J”:

Applet JApplet ; Label JLabel ; etc.

Page 9: 278660

9

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

КомпонентыComponent - это основной абстрактный класс, который инкапсулирует (включает в себя) все атрибуты визуального интерфейса - обработка ввода с клавиатуры, управление фокусом, взаимодействие с мышью, уведомление о входе/выходе из окна, изменения размеров и положения окон, прорисовка своего собственного графического представления, сохранение текущего текстового шрифта, цветов фона и переднего плана (более 10 методов).

Подклассы Component.

ContainerContainer - это абстрактный подкласс класса Component, определяющий дополнительные методы, которые дают возможность помещать в него другие компоненты, что дает возможность построения иерархической системы визуальных объектов. Container отвечает за расположение содержащихся в нем компонентов с помощью интерфейса LayoutManager, описание которого будет позднее в этой главе.

PanelКласс Panel - это очень простая специализация класса Container. В отличие от последнего, он не является абстрактным классом. Поэтому о Panel можно думать, как о допускающем рекурсивную вложенность экранном компоненте. С помощью метода add в объекты Panel можно добавлять другие компоненты. После того, как в него добавлены какие-либо компоненты, можно вручную задавать их положение и изменять размер с помощью методов move, resize и reshape класса Component.

Класс Applet - один из подклассов Panel. Каждый раз, когда мы создается Applet, методы paint и update рисуют его изображение на поверхности объекта Panel.

Page 10: 278660

10

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

Прежде, чем мы углубимся в методы Panel, давайте познакомимся с компонентом Canvas, который можно вставлять в пустую Panel при работе с объектом Applet.

Page 11: 278660

11

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

Page 12: 278660

12

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

Page 13: 278660

13

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

Page 14: 278660

14

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

Page 15: 278660

15

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

Page 16: 278660

16

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

Page 17: 278660

17

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

Page 18: 278660

18

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

Механизм запуска апплетов и элементов оконной графики из командной строки заключается в следующем:

1. Создать с помощью метода init() компоновку элементов апплета;

2. В методе main() создать экземпляр разработанного апплета,

3. Добавить все описанные элементы в рабочую область апплета,

4. Выполнить методы init() и start() применительно к созданному экземпляру апплета,

5. Визуализировать все действия,

6. Нормально выйти из приложения (из метода main()) при закрытии окна апплета.

Page 19: 278660

19

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

Пример (Брюс Эккель, «Философия Java»).

//: c13:Applet1c.java// Приложение и апплет.// <applet code=Applet1c width=100 height=50>// </applet>import javax.swing.*;import java.awt.*;import com.bruceeckel.swing.*;public class Applet1c extends JApplet { public void init() { getContentPane().add(new JLabel("Applet!")); } // main() для приложения: public static void main(String[ ] args) { JApplet applet = new Applet1c(); JFrame frame = new JFrame("Applet1c"); // Для закрытия приложения: Console.setupClosing(frame); frame.getContentPane().add(applet); frame.setSize(100,50); applet.init(); applet.start(); frame.setVisible(true); }}

Подключение библиотек Swing, AWT и авторского пакета Б.Эккеля

Объявление класса и вызов метода init(), который размещает методом add() в рабочее пространство getContentPane() визуальный элемент строковая метка JLabel.

Объявление и создание экземпляра апплета и создание рамки (экземпляр класса JFrame)

Авторская разработка Б.Эккеля, позволяющая нормально выйти из приложения после закрытия рамки frame.

Добавление апплета в рабочее пространство рамки, тем самым связываются события, происходящие с рамкой, с работой апплета;

Определение размеров рамки;

Запуск апплета;

Все изменения апплета в рамке становятся видимыми.

Page 20: 278660

20

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

Подробности создания апплетов и элементов оконного интерфейса читайте на учебном сайте

http://potor.baikal.ru (Лекция 15)