Главная страница

Java. Полное руководство. 8-е издание. С. Н. Тригуб Перевод с английского и редакция


Скачать 25.04 Mb.
НазваниеС. Н. Тригуб Перевод с английского и редакция
АнкорJava. Полное руководство. 8-е издание.pdf
Дата28.02.2017
Размер25.04 Mb.
Формат файлаpdf
Имя файлаJava. Полное руководство. 8-е издание.pdf
ТипДокументы
#3236
страница64 из 90
1   ...   60   61   62   63   64   65   66   67   ...   90
Глава 22. Класс Applet
6 9 9

7 0 Часть II. Библиотека Java
Аплеты на базе библиотеки AWT (вроде тех, что обсуждаются в настоящей главе) также зачастую переопределяют метод paint ()
, который определен в классе
Component библиотеки AWT. Этот метод вызывается, когда вывод аплета должен быть заново отображен. (Аплеты на основе библиотеки Swing используют другой механизм для решения этой задачи) Эти пять методов могут быть собраны в шаблон, показанный ниже Шаблон аплета.
import j a v a .a w t .*;
import java.applet.*;
/*


*/
public class AppletSkel extends Applet {
// Вызывается первым
public void init() {
// инициализация Вызывается вторым, после in i t ()- Также вызывается при перезапуске аплета. */
public void start() {
// запускает или возобновляет выполнение Вызывается при останове аплета,
public void stop() {
// приостановка выполнения Вызывается перед уничтожением аплета. Это - последний выполняемый метод выполняет завершающие действия Вызывается, когда окно аплета должно быть восстановлено
public void paint(Graphics g) {
// перерисовка содержимого окна
}
}
Хотя этот шаблон ничего и не делает, его можно откомпилировать и запустить. Будучи запущенным в средстве просмотра аплетов, он создает окно, показанное на рис. Инициализация и прекращение работы аплета

Важно понимать порядок вызова различных методов, показанных выше в шаблоне. Когда аплет стартует, вызываются по порядку следующие методы. init ()
2. start ()
3. paint ()
Глава 22. Класс Applet
7 0 1
I B
Applet
Applet Рис. Окно, отображаемое шаблоном а пл е та
Когда работа аплета прекращается, происходит следующая последовательность вызовов. s t o p ()
2. d e s t r o y (Рассмотрим эти методы более подробно.
Это первый метод в цепочке вызовов. Именно в нем следует инициализировать переменные. На протяжении времени выполнения аплета этот метод вызывается лишь однажды.
После метода i n i t () вызывается метод s t a r t (), который также вызывается для перезапуска аплета после его останова. В то время как метод i n i t () вызывается лишь однажды, при первоначальной загрузке аплета, метод s t a r t () вызывается каждый раз, когда документ HTML, содержащий аплет, отображается на экране. Поэтому если пользователь покидает веб-страницу, а затем возвращается обратно, аплет каждый раз возобновляет свою работу в методе s t a r t (Каждый раз, когда вывод аплета должен быть перерисован, вызывается метод p a i n t (). Эта ситуация возникает в нескольких случаях. Например, окно, в котором выполняется аплет, может быть перекрыто другим окном, а затем вновь открыто. Или же окно аплета может быть минимизировано, а затем восстановлено. Метод p a i n t () также вызывается вначале выполнения аплета. В любом случае всякий раз, когда нужно перерисовать аплет, вызывается его метод p a i n t (). Метод p a i n t () принимает один параметр типа G ra p h ic s . Этот параметр будет содержать графический контекст, описывающий графическую среду, в которой выполняется аплет. Этот контекст используется всякий раз, когда запрашивается вывод аплета.
М етод
i n i t ( Метод Метод Метод Этот метод вызывается, когда веб-браузер покидает документ HTML, содержащий аплет. Например, когда осуществляется переход на другую страницу. Когда

7 0 Часть II. Библиотека вызывается метод stop
( ), аплет, возможно, работает. Следует использовать метод stop
() для приостановки потока, который не должен выполняться, когда аплет невидим. Вы можете перезапустить его, когда вызывается метод start (), при возврате пользователя на страницу.
М етод d e s t r o y ( Когда среда определяет, что ваш аплет должен быть полностью удален из памяти, вызывается метод destroy ()
. В этот момент следует освободить все ресурсы, которые мог использовать ваш аплет. Вызову метода destroy
() всегда предшествует вызов метода stop (Переопределение метода

u p d a t e
( В некоторых ситуациях вашему аплету может понадобиться переопределить другой метод, определенный в библиотеке AWT, — это метод update ()
. Этот метод вызывается, когда ваш аплет запрашивает перерисовку определенной части окна. Версия метода update (
) по умолчанию просто вызывает метод paint (). Однако вы можете переопределить метод update
() так, чтобы он выполнял более тонкую перерисовку. Вообще, переопределение метода update
() — это специализированная техника, которая не применяется во всех аплетах, ив примерах этой главы метод update
() не переопределяется.
Простые методы отображения аплетов
Как мы уже упоминали, аплеты отображаются в окне, и аплеты на основе библиотеки AWT используют ее для выполнения ввода и вывода. Хотя в последующих главах мы будем подробно рассматривать методы, процедуры и приемы, используемые для полного управления оконной средой на базе библиотеки AWT, некоторые из них мы все же рассмотрим уже здесь, поскольку они понадобятся для разработки примеров аплетов. (Помните, что аплеты на основе библиотеки Swing будут рассматриваться в книге далее.)
Как было сказано в главе 13, для вывода строки в аплете используется метод drawstring
() класса
Graphics. Обычно этот метод вызывается внутри метода update
() или paint ()
. Он имеет следующую общую форму drawstring(String сообщение х, int у)

Здесь сообщение это строка, которая должна быть выведена начиная сточки с координатами х, у. В окне Java левый верхний угол имеет координаты 0, 0. Метод drawstring
() не распознает символы переноса строки. Если вы хотите начать вывод текста с новой строки, то должны сделать это явно, указав точные координаты X, Y точки, с которой нужно начать вывод этой новой строки текста как увидите в последующих главах, существуют приемы, позволяющие облегчить этот процесс).
Чтобы установить цвет фона для окна аплета, используйте метод setBack- ground ()
. Чтобы установить цвет переднего плана (цвет вывода текста, например, используйте метод setForeground ()
. Эти методы определены в классе
Component и имеют следующую общую форму setBackground(Color

новыйЦвет)
void setForeground(Color
новыйЦвет)
Глава 22. Класс Applet
7 0 Здесь параметр
новыйЦвет определяет новый цвет. Класс
Color определяет перечисленные ниже константы, которые могут быть использованы для указания цвета o l o r .orange

C o l o r .cyan
Color.pink
C o l o r .darkGray
Color.red
C o l o r .gray
Color.white
C o l o r .green
Color.yellow
C o l o r Определены также версии этих констант в верхнем регистре. В следующем примере устанавливается зеленый цвет фона и красный цвет текста Подходящим для установки цветов фона и переднего плана является метод init ()
. Конечно, вовремя выполнения вашего аплета вы можете изменять эти цвета так часто, как хотите.
Получить текущие установки цветов переднего плана и текста можно вызовами методов getBackground
() и getForeground
() соответственно. Они также определены в классе
Component и показаны ниже getBackground()

Color Рассмотрим пример очень простого аплета, который устанавливает в качестве цвета фона циана цвета переднего плана — красный, а затем отображает сообщение, иллюстрирующее порядок вызова методов init
( )
,
start
() и paint
() при запуске аплета.
/* Простой аплет, устанавливающий цвета фона и переднего плана и отображающий строку java.awt.*;
import jav a .applet.*;
/*


*/
public class Sample extends Applet{
String msg;
// Установить цвета фона и переднего плана
public void i n i t О {
setBackground(Color.cyan);
setForeground(Color.red);
msg = "Inside i n i t (
)
}
// Инициализировать отображаемую строку void sta r t () {
msg +
= " Inside start(
)
}
// Отобразить msg в окне аплета,
public void paint(Graphics g) {
msg +
= " Inside p a i n t (
).";

7 0 Часть II. Библиотека Java
g .drawstring(msg,
10, Этот аплет создает окно, показанное на рис. 22.2.
A p p l e t . V i e w e r : S a m p l e
' s- П ^Applet
^ ’
K
V'V*
1
^
f
* j -^;4
■'* ' 7,'^ ч, , ъ I .,- *:
^
$
f
^
i:
Applet Рис. 22.2. Окно аплета, выводящего строку
Методы stop
() и destroy
() не переопределены, поскольку в таком простом аплете это не требуется.
Запрос перерисовки
Запомните главное правило аплет пишет в свое окно только тогда, когда его методы update
() или paint
() вызываются библиотекой AWT. Отсюда интересный вопрос как сам аплет может инициировать собственное обновление, когда изменяется его информация Например, если аплет отображает двигающийся баннер, какой механизм заставит аплет обновлять окно при каждом шаге прокрутки этого баннера? Помните, что одним из наиболее важных ограничений, накладываемых на аплет, является то, что он должен быстро возвращать управление исполняющей системе. Например, он не может создавать циклы внутри метода paint ()
, которые будут непрерывно прокручивать баннер. Это помешало бы передаче управления обратно в библиотеку AWT. Имея такое ограничение, можно подумать, что вывод в окно вашего аплета, как минимум, существенно затруднен. К счастью, это не так. Всякий раз, когда ваш аплет нуждается в обновлении отображаемой в его окне информации, он просто вызывает метод repaint (Метод repaint
() определен в библиотеке AWT. Он заставляет исполняющую систему библиотеки AWT осуществлять вызов метода update
() вашего аплета, который в реализации по умолчанию обращается к методу paint ()
. Таким образом, чтобы другая часть вашего аплета могла выполнять вывод в его окно, просто сохраните выводи вызовите метод repaint
(). Затем библиотека AWT выполнит вызов метода paint ()
, который может отобразить сохраненную информацию. Например, если часть вашего аплета нуждается в выводе строки, она может сохранить ее в переменной класса
String, а затем вызвать метод repaint
( ). Внутри метода paint (
) вы выведите строку с помощью метода drawstring (Метод repaint
() имеет четыре формы. Рассмотрим их по порядку. Следующая версия определяет область, подлежащую перерисовке repaint(int слева int сверху int ширина int

высота)
Здесь координаты правого верхнего угла области указаны параметрами слева и сверху а ширина и высота области — параметрами ширина и высота Эти измерения указаны в пикселях. Вы экономите время, указывая область для перерисовки. Обновление окон обходится дорого в смысле затрат времени. Если вам нужно
Глава 22. Класс Applet
7 0 обновить только небольшую часть окна, то эффективнее будет обновить только эту область, а не всю поверхность окна.
Вызов метода r e p a i n t
() — это, по сути, запрос вашего аплета на скорейшее обновление. Но если ваша система работает медленно или занята, метод u p d a t e
() может и не вызваться немедленно. Множественные запросы на перерисовку, которые поступают за короткий период времени, могут быть собраны вместе, так что метод u p d a t e
() вызывается лишь время от времени. Во многих ситуациях это может представлять проблему, включая вывод анимации, когда существенно время обновления. Одним из решений этой проблемы может быть использование следующих форм метода r e p a i n t
( )
void repaint(long
максЗадержка)
void repaint(long
максЗадержка,
int
x ,
int
y ,
int ширина int
высота)
Здесь м аксЗадерж ка указывает максимальное количество миллисекунд, которые могут пройти до того, как будет вызван метод u p d a t e ( )
. Однако следует иметь ввиду, что если время истечет прежде, чем системе удастся вызвать метод u p d a t e ( )
, этот метод не будет вызван. Никакого возвращаемого значения или передаваемого исключения нет, поэтому будьте осторожны.
На заметку Существует возможность вывода в окно аплета методами, отличными от методов p a i n t (
) или
u p d a te ( )
. Для вывода в окно такой метод должен получить графический контекст. Однако для большинства исключений лучше и проще осуществлять вывод окна через метод
p a i n t
( ) и вызывать метод
r e p a i n t
( ) при изменении содержимого окна.
Простой аплет с баннером
Чтобы продемонстрировать метод r e p a i n t ( )
, разработаем простой аплет для демонстрации баннера. Этот аплет будет прокручивать сообщение слева направо, через все окно аплета. Поскольку прокрутка окна — повторяющаяся задача, она будет выполняться в отдельном потоке, созданном аплетом при инициализации. Вот исходный текст нашего аплета баннера.
/* Простой аплет баннера.
Этот аплет создает поток, прокручивающий сообщение, содержащееся в msg, справа налево в поле окна аплета.
*/
import j a v a .a w t .*;
import java.applet.*?
/*


*/
public class SimpleBanner extends Applet implements Runnable {
String msg = " A Simple Moving Banner.";
Thread t = null;
int state;
volatile boolean stopFlag;
// Установить цвета и инициализировать поток
public void i n i t () {
setBackground(Color.cyan);
setForeground(Color.red);
}
// Запустить поток 3ak 3030

7 0 6 Часть II. Библиотека Java
public void start() {
t = new Thr e a d (this);
stopFlag = false;
t .sta r t ();
// Точка входа для потока, прокручивающего баннер,
public void r u n () {
// Снова отобразить баннер f o r ( ; ; ) {
try {
repaint();
Thread.sleep(250);
if(stopFlag)
break;
} cat c h (InterruptedException e) {}
}
}
// Пауза в выводе баннера,
public void s t o p () {
stopFlag = true;
t = null;
}
// Отображение баннера,
public void paint(Graphics g) {
char ch;
ch = m s g .charAt(0) ;
msg = m s g .substring(1, m s g .length());
msg += ch;
g .drawstring(msg,
50, Окно этого аплета будет выглядеть, как показано на рис. Давайте рассмотрим внимательнее, как работает этот аплет. Для начала обратите внимание на то, что класс
SimpleBanner расширяет класс
Applet, как и следовало ожидать. Но, кроме того, он реализует интерфейс
Runnable. Это необходимо, поскольку аплет создаст второй поток выполнения, который будет использован для прокрутки баннера. Внутри метода init
() устанавливаются цвета фона и переднего плана аплета.
После инициализации исполняющая система вызывает метод start
() для запуска выполнения аплета. Внутри метода start
() создается новый поток выполнения и присваивается переменной t класса
Thread. Затем в состояние false
Applet
Applet Рис. 22.3. Окно аплета с прокруткой сообщения Глава 22. Класс Applet
7 0 устанавливается булева переменная s t o p F l a g , которая управляет выполнением аплета. После этого поток запускается вызовом метода t
s t a r t
(). Помните, что метод t . s t a r t
() вызывает метод, определенный в классе
T h r e a d , те. начинает выполнять метод r u n
(). Это не инициирует вызова версии метода s t a r t
(), определенного в классе
A p p l e t . Это два отдельных метода.
Внутри метода r u n
() вызывается метод r e p a i n t
(). Это в конечном итоге приводит к вызову метода p a i n t
() и прокручиваемому отображению содержимого строки msg. Между итерациями метод r u n
() засыпает на четверть секунды. В результате содержимое строки m sg прокручивается слева направо в режиме непрерывного движения. Переменная s t o p F l a g проверяется на каждой итерации. Когда она принимает значение t r u e , метод r u n
() прерывается.
Если браузер отображает аплет вовремя просмотра новой страницы, вызывается метод s t o p ( )
, который устанавливает переменную s t o p F l a g в состояние
- r u e , прерывая тем самым выполнение метода r u n
(). Этот механизм служит для остановки потока, когда страница более не просматривается. Когда же аплет снова оказывается в поле зрения, вновь вызывается его метод s t a r t
(), который запускает новый поток для прокрутки баннера.
Использование строки состояния
Кроме отображения информации в собственном окне, аплет может также выводить сообщения в строку состояния браузера или средства просмотра аплета, в котором он запущен. Чтобы сделать это, вызовите метод showS t a t u s
() со строкой, которую хотите отобразить. Строка состояния — хорошее место для того, чтобы дать пользователю представление о происходящем в аплете, показать параметры или вывести сообщения о некоторых типах ошибок. Строка состояния — отличный инструмент отладки, поскольку предоставляет простой способ вывода информации о вашем аплете.
В следующем аплете демонстрируется применение метода showS t a t u s () .
/ Использование окна состояния
import java.awt.*;
_-nport java.
applet.
* ;
*
«-applet code="StatusWindow" width=300 height
=
50>
< /applet>
*/
pjblic class StatusWindow extends Applet {
public void init() {
setBackground(Color.cyan);
}
// Отобразить msg в окне аплета,
public void paint(Graphics g) {
g .drawstring("This is in the applet window.", 10, 20);
showStatus("This is shown in th6 status window.");
// Это в окне аплета.", 10, 20);
// Это в строке состояния.");
}
Окно аплета показано на рис. 22.4.

7 0 Часть II. Библиотека Java
A pplet Viewe г StatusW indow ^
Applet
This is shown in the status Рис. 22.4. Окно аплета, использующего строку состояния
Дескриптор HTML
a p p l e Как уже упоминалось, на момент написания книги компания Oracle рекомендует дескриптор
APPLET для запуска аплета вручную, когда протокол JNLP не используется. Средство просмотра аплетов выполнит каждый дескриптор
APPLET, который он обнаружит, в отдельном окне, в то время как веб-браузеры позволяют выполнять много аплетов на одной странице. До сих пор мы использовали только упрощенную форму дескриптора
APPLET. Теперь пришло время рассмотреть его более внимательно.
Синтаксис полной формы дескриптора
APPLET показан ниже. Элементы, взятые в квадратные скобки, являются необязательными

= и Я Ь _ базы кода файла пл е та альтернативный текст имя экземпляра а пл е та пик селе й
= пик селе й

[ALIGN
= выравнивание пик селе й
[HSPACE
= пик селе й Имя атрибута Значение атрибута Имя атрибута Значение атрибута Код, отображаемый при отсутствии Теперь рассмотрим каждую часть по очереди
— необязательный атрибут, задающий базовый URL кода аплета, который представляет собой каталог, где будет выполняться поиск исполняемого файла класса (указанного в дескрипторе
CODE). Если этот атрибут не задан явно, в качестве атрибута
CODEBASE используется каталог URL документа HTML. Атрибут
CODEBASE необязательно должен находиться на том же хосте, откуда прочитан документ HTML.
• CODE
— обязательный атрибут, который задает имя файла, содержащего скомпилированный файл . c l a s s вашего аплета. Имя этого файла задается относительно базового URL кода аплета, являвшегося каталогом, где располагается файл HTML, либо каталогом, указанным в атрибуте
CODEBASE.
• ALT
— необязательный атрибут, используемый для указания краткого текстового сообщения, которое должно быть отображено, если браузер распознает дескриптор
APPLET, нов данный момент не сможет выполнять аплеты
Java. Это отличается от альтернативного кода HTML, который вы предоставляете для браузеров, вообще не поддерживающих аплеты.
Глава 22. Класс Applet
7 0 9
• NAME
— необязательный атрибут, используемый для указания имени экземпляра аплета. Аплеты должны именоваться таким образом, чтобы другие аплеты на той же странице могли находить их по именами взаимодействовать сними. Чтобы получить аплет по имени, используйте метод get
Ap­
plet ()
, определенный в интерфейсе
AppletContext.
• WIDTH и HEIGHT — обязательные атрибуты, задающие размер (в пикселях) отображаемой области аплета.
• ALIGN
— необязательный атрибут, задающий выравнивание аплета. Этот атрибут трактуется точно также, как в дескрипторе HTML
IMG, и имеет следующие значения
LEFT, RIGHT, TOP, BOTTOM, MIDDLE, BASELINE, TEXTTOP, и ABSBOTTOM.
• VS
PACE и
HSPACE
— необязательные атрибуты. Атрибут
VS
PACE определяет пространство в пикселях над и под аплетом, а атрибут
HSPACE
— пространство в пикселях по бокам аплета. Они трактуются точно также, как и атрибуты
VSPACE и
HSPACE дескриптора
IMG.

PARAM NAME и
VALUE
— дескриптор
PARAM позволяет указать специфичные для аплета аргументы. Аплеты получают доступ к этим атрибутам при помощи метода Среди прочих допустимых атрибутов, еще можно упомянуть атрибут
ARCHIVE, позволяющий задать один или более архивных файлов, и атрибут
OBJECT, указывающий сохраненную версию аплета. В общем случае дескриптор
APPLET должен включать только атрибут
CODE или
OBJECT, ноне оба сразу.
Передача параметров аплетам
Как только что упоминалось, дескриптор HTML
APPLET позволяет передавать параметры аплету. Для извлечения параметра служит метод get
Parameter ()
. Он возвращает значение указанного параметра в форме строки. Таким образом, для числовых и булевых значений вам придется преобразовывать их строковые представления во внутренние форматы. Рассмотрим пример передачи параметров Использование параметров
import j a v a .a w t .*;
import java.applet.*;
/*










*/
public class ParamDemo extends Applet {
String fontName;
int fontSize;
float leading;
boolean active;
// Инициализация строки для отображения
public void s t art() {
String param;
Часть II. Библиотека Java
fontName = getParameter("fontName");
if(fontName == null)
fontName = "Not Found";
// fontName = "He найден = getParameter("fontSize")
;
try {
if(param != null)
fontSize = Integer.parselnt(param);
else
fontSize = 0;
} catch(NumberFormatException e) {
fontSize = -1;
}
param = getParameter("leading");
try {
if(param != null)
leading = Float.valueOf(param).floatValue();
else
leading = 0;
} catch(NumberFormatException e) {
leading = -1;
}
param = getParameter("accountEnabled");
if(param != null)
active = Boolean.valueOf(param).booleanValue();
}
// Отобразить параметры
public void paint(Graphics g) {
g.drawstring("Font name: " + fontName, 0, 10);
g.drawstring("Font size: " + fontSize, 0, 26);
g.drawstring("Leading: " + leading, 0, 42);
g.drawstring("Account Active: " + active, 0, 58);
// g Имя шрифта " + fontName, 0, 10);
// Размер шрифта " + fontSize, 0, 26);
// g Отступ " + leading, 0, 42);
// g Активный счет " + active, 0, Пример результирующего окна этого аплета показан на рис. 22.5.
A pplet View er: Param Dem o]
Applet
Font name Courier
F ont size. 14
L e a d in g 2 0
Account Active: true
Applet Рис. 22.5. Окно аплета, принимающего параметры
Глава 22. Класс Applet
7 1 Как видно в приведенном выше коде, следует проверять возвращаемые значения метода get
Parameter ()
. Если параметр недоступен, метод get
Parame­
ter
() вернет значение null. Также должна быть предпринята попытка преобразования в числовые типы в операторе try, который перехватывает исключение
NumberFormatException. Внутри аплетов никогда нельзя допускать необработанных исключений.
Усовершенствование аплета баннера
Параметр можно использовать для усовершенствования аплета баннера, показанного ранее. В предыдущей версии отображаемое сообщение было жестко закодировано в аплете. Передача сообщения в виде параметра позволяет аплету баннера отображать различные сообщения при каждом выполнении. Ниже приведена его усовершенствованная версия. Обратите внимание на то, что дескриптор
APPLET вначале файла теперь определяет параметр по имени message, связанный со строкой в кавычках Параметризованный баннер,

import j a v a .a w t .*;
import java.applet.*;
/*




*/
public class ParamBanner extends Applet implements Runnable {
String msg;
Thread t = null;
int state;
volatile boolean stopFlag;
// Установить цвета и инициализировать поток
public void i n i t () {
setBackground(Color.cyan);
setForeground(Color.red);
}
// Запуск потока
public void start() {
msg = getParameter("message");
if(msg == null) msg = "Message not found.";
msg = " " + msg;
t = new Thread(this);
stopFlag = false;
t .start();
}
// Точка входа для потока, запускающего баннер,
public void r u n () {
// Переотобразить баннер
f o r (
; ;
)
{
try {
repaint();
Thread.s l eep(250);
i f (stopFlag)
break;
} c a t c h (InterruptedException e) {}

7 1 2 Часть II. Библиотека Java
}
}
1 1
Пауза в отображении баннера,
public void st o p () {
stopFlag = true;
t = null;
}
// Отобразить баннер,
public void paint(Graphics g) {
char ch;
ch = m s g .charAt(0);
msg = msg.substring(1, m s g .length());
msg += ch;
g .drawstring(msg,
50, Методы
getDocumentBase () и

getCodeBase
( Нередко приходится создавать аплеты, которые должны явно загружать медиа­
информацию и текст. Java позволяет аплетам загружать данные из каталога, содержащего файл HTML, который запускает аплет база документа, а также из каталога, из которого загружается класс аплета база кода Эти каталоги возвращаются как объекты класса
URL описаны в главе 20) из методов getDocumentBase
() и getCodeBase
( ). Они могут быть связаны со строкой — именем файла, который вы хотите загрузить. Чтобы действительно загрузить другой файл, вы используете метод showDocument ()
, определенный в интерфейсе
Applet
Cont ext, о котором поговорим в следующем разделе.
В приведенном ниже аплете иллюстрируется применение этих методов Отображение баз документа и кода
import j a v a .a w t .*;
import java.applet.*;
import java.net.*;
/*


*/
public class Bases extends Applet {
// Отображение базы документа и базы кода
public void paint(Graphics g) {
String msg;
URL uri = getCodeBase(); // получить базу кода
msg = "Code base: " + u r i .toString();
// msg = "База кода " + u r i .toString();
g.drawstring(msg, 10, 20);
uri = getDocumentBase(); // получить базу документа
msg = "Document base: " + u r i .toString();
// msg = "База документа " + u r i .toString();
Глава 22. Класс Applet
7 1 3
g .drawstring(msg, 10, Примерный вывод этого аплета показан на рис. 22.6.
= A pplet View er: Bases ;
j
t
i
l
l
Applet
Code base: file:/h:/java/
Document base file /h./java/Bases java
Applet Рис. 22.6. Окно аплета, отображающего базы документа и кода
Интерфейс
AppletContext и метод Одним из применений Java является использование активных изображений и анимации для обеспечения графических средств навигации в веб, которые более интересны, чем простые текстовые ссылки. Чтобы позволить вашему аплету передавать управление другому URL, следует использовать метод showDocument (), определенный в интерфейсе
AppletContext. Интерфейс позволяет получать информацию от исполняющей среды аплета. Методы, определенные в интерфейсе
AppletContext, перечислены в табл. 22.2. Контекст текущего выполняемого аплета получается вызовом метода get
Applet
Context (), определенного в классе Таблица 22.2. Методы, определенные интерфейсом p p l e t C o n t e x t

Метед
Описание
Applet getApplet(String имяАплета)
Enumeгation
ge tApplets()
AudioClip
getAudioClip(URL
u r l)
Image getImage(URL
u r l)
InputStream
getStream(String ключ Возвращает аплет, заданный именем имяАплета
, если он находится внутри контекста текущего аплета. В противном случае возвращается значение
nul Возвращает перечисление, содержащее все аплеты из контекста текущего аплета
Возвращает объект интерфейса
AudioCl
ip,
инкапсулирую­
щий аудиоклип, находящийся вместе, указанном Возвращает объект класса
Image,
инкапсулирующий графическое изображение, находящееся вместе, указанном ur Возвращает поток, связанный с ключ. Ключи привязываются к потокам с помощью метода
setStream(). Если связанного с ключ потока не существует, возвращается значение
null
Возвращает итератор для ключей, ассоциированных с вызывающим объектом. Ключи привязаны к потокам. См. также методы
getStream (
) и
setStream ()

7 U Часть II. Библиотека Окончание табл. 22.2

Метод
Описание
void setStream(String ключ Inputstream поток где showStatus(String
строка Связывает поток, заданный параметром поток b,bс ключом, переданным параметром ключ.
Ключ удаляется из вызывающего объекта, если поток содержит значение
nul Отображает в представлении документ, расположенный по адресу URL, переданному параметром
uri.
Этот метод может не поддерживаться средствами просмотра аплетов
Отображает в представлении документ, расположенный по адресу URL, переданному параметром
u ri.
Этот метод может не поддерживаться средствами просмотра аплетов. Расположение документа указано параметром где как описано в тексте
Отображает содержимое параметра строка в окне (строке) состояния
Как только вы получаете контекст аплета, то сразу можете перенести в отображаемое представление другой документ, вызвав для этого метод showDocument (). Этот метод не имеет возвращаемого значения и не передает исключений в случае неудачи, поэтому используйте его осторожно. Доступны два метода showDocu­
ment ()
. Метод showDocument
(URL) отображает документ, расположенный по указанному URL, а метод showDocument
(URL,
String)
— документ, находящийся в указанном месте внутри окна браузера. Корректными аргументами параметра где являются "_self" отобразить в текущем фрейме),
"_parent" отобразить в родительском фрейме),
"_top" отобразить во фрейме наивысшего уровня) и n_blankn отобразить в новом окне браузера). Вы можете также задать имя, что позволит отобразить документ в новом окне браузера по его имени.
В следующем аплете демонстрируется применение интерфейса
Appl е t
Cont ext и метода showDocument ()
. При выполнении он получает контекст текущего апле­
та и использует его для передачи управления файлу по имени
Test .html. Этот файл должен располагаться в том же каталоге, что и аплет. Файл
Test .html может содержать любой допустимый гипертекст Использование контекста аплета, getCodeBase()
и showDocument() для отображения файла H T M L .

*/
import java.awt.*;
import java.applet.*;
import j a v a .n e t .*;
/*


*/
public class ACDemo extends Applet {
public void s t a r t () {
AppletContext ac = getAppletContext();
URL uri = getCodeBase(); // получить uri данного аплета
try ас не найден
Глава 22. Класс Applet
7 1 Интерфейс Интерфейс определяет три метода play
() (воспроизведение клипа сначала) (останов воспроизведения клипа) и loop
() (непрерывное циклическое воспроизведение. После загрузки аудиоклипа с помощью метода getAudioClip ()
, эти методы можно применять для его воспроизведения.
Интерфейс Интерфейс предоставляет средства, с помощью которых аплет и браузер (или средство просмотра аплетов) взаимодействуют между собой. Обычно ваш код не должен реализовывать этот интерфейс.
Консольный вывод
Хотя вывод в окно аплета должен осуществляться методами графического интерфейса пользователя, такими как drawstring ()
, аплеты также могут использовать консольный вывод — в частности, для отладочных целей. Когда в аплете вызывается метод вроде
System, out .println ()
, его вывод не посылается в окно аплета. Вместо этого вывод появляется либо в сеансе консоли, из которой вы запустили средство просмотра аплета, либо в консоли Java, которая доступна в некоторых браузерах. Использование консольного вывода в целях, отличных от отладки, не рекомендуется, поскольку он нарушает принципы дизайна графического интерфейса, к которым привыкли большинство пользователей



1   ...   60   61   62   63   64   65   66   67   ...   90


написать администратору сайта