Назад
Вперед
10.2. Вызов метода из другого аплета
Пример демонстрирует использование интерфейса
AppletContext и метода getApplet для вызова методов start и stop
анимационного многопоточного аплета. При этом
данный аплет может приостанавливать и
возобновлять анимацию в окне контролируемого
аплета.
Исходный текст примера
Архив проекта для Java WorkShop 2.0
Демонстрация
(ваш браузер должен уметь работать с аплетами
Java JDK 1.1)
Немного теории
Интересно, что аплет может вызывать методы
других аплетов, расположенных в том же документе
HTML, если они определены как public.
Для вызова метода вам необходимо получить
ссылку на аплет, метод которого вы собираетесь
вызвать.
Чтобы это сделать, вы можете либо получить
полный список всех найденных аплетов и найти там
нужный, либо сразу получить ссылку на аплет с
заданным именем.
Первый метод основан на использовании метода
getApplets, определенного в интерфейсе AppletContext, а
второй - на применении метода getApplet того же самого
интерфейса.
Как работает метод getApplet?
В качестве единственного параметра этому
методу следует передать текстовую строку имени
аплета класса String. Если аплет с таким именем
будет найден в текущем документе HTML, метод getApplet
вернет на него ссылку.
Имя аплета обычно задается параметром NAME
оператора <APPLET> языка гипертекстовой разметки
HTML, например:
<APPLET CODE=Test.class NAME="Test" . . .>
</APPLET>
Описание примера
Наш аплет AppletControl управляет работой другого
аплета Scroll2, исходный текст которого приведен в
разделе "6.7. Устранение
мерцания" нашей библиотеки примеров (рис. 1).
Рис. 1. Аплет AppletControl может запускать и
останавливать анимацию в окне аплета Scroll2
Сразу после загрузки документа HTML с аплетами
AppletControl и Scroll2 в окне второго из перечисленных
аплетов вы будете наблюдать бегущую строку. Если
нажать на кнопку Stop, расположенную в окне аплета
AppletControl, анимация остановится, а если на кнопку
Start - возобновится.
Рассмотрим исходный текст примера.
Главный класс аплета AppletControl
Так как аплет AppletControl будет обращаться к методу,
определенному в аплете Scroll2, мы включили
определение класса Scroll2 в исходный текст
оператором import:
import java.awt.*;
import java.applet.*;
import java.util.*;
import java.awt.event.*;
import Scroll2;
public class AppletControl extends Applet
implements ActionListener
{
Button btnStart;
Button btnStop;
Scroll2 appletScroll;
. . .
}
Класс AppletControl создан на базе класса Applet и
реализует интерфейс ActionListener, необходимый для
отслеживания нажатий на кнопки.
Поля btnStart и btnStop хранят ссылки на кнопки Start и Stop,
а поле appletScroll - на найденный аплет Scroll2.
Метод init
Получив управление, метод init создает кнопки,
добавляет их в окно аплета и подключает
обработчики событий:
btnStart = new Button("Start");
btnStop = new Button("Stop");
add(btnStart);
add(btnStop);
btnStart.addActionListener(this);
btnStop.addActionListener(this);
Далее метод init получает ссылку на интерфейс
AppletContext:
AppletContext ac;
ac = getAppletContext();
Пользуясь этой ссылкой и методом getApplet, мы
получаем ссылку на аплет Scroll2:
appletScroll =
(Scroll2)ac.getApplet("Scroll2");
Обратите внимание на явное приведение типа для
ссылки, возвращаемой методом getApplet.
Зачем мы его делаем?
При обращении к методам, специфическим для
аплета Scroll2 и не определенным в классе Applet
транслятору потребуется знание структуры класса
Scroll2. Поэтому в начале листинга мы импортируем
описание этого класса, а ссылку appletScroll
определяем как поле класса Scroll2.
Последнее, что делает метод init - это изменение
цвета фона аплета на желтый:
setBackground(Color.yellow);
Метод actionPerformed
Для управления анимацией в аплете Scroll2 метод
actionPerformed вызывает методы start и stop класса Scroll2.
Вот как вызывается метод start:
if(appletScroll != null)
{
if(e.getSource().equals(btnStart))
{
appletScroll.start();
}
. . .
}
Мы просто обращаемся к методу start с применением
ссылки из поля appletScroll (при условии что аплет Scroll2
был найден и эта ссылка не равна null).
Аналогичным образом вызывается метод Stop:
else if(e.getSource().equals(btnStop))
{
appletScroll.stop();
}
Метод getAppletInfo
Этот метод возвращает описание аплета в виде
текстовой строки класса String:
public String getAppletInfo()
{
return "Name: AppletControl";
}
Назад Вперед |