Обращение к полям и методам других аплетов
Теперь вы научились искать аплеты, расположенные в текущем документе HTML, получая список ссылок на соответствующие объекты. Однако для того чтобы получить доступ к полям и методам найденных аплетов, вы должны сделать еще одну вещь. Нужно импортировать в аплет, который занимается поиском, описание класса аплета, к полям и методам которого будет выполняться обращение.
Поясним это.
Все аплеты, как вы знаете, происходят от класса Applet. Они добавляют в этот класс свои поля и методы, а также переопределяют методы из базового класса.
В процессе поиска аплетов метод nextElement возвращает ссылку на объект, принадлежащий к классу Object, который мы можем преобразовать к классу Applet:
Applet currentApplet = (Applet)(eApplets.nextElement());
Однако такое преобразование сможет открыть нам доступ только к тем полям и методам, которые определены в базовом классе. Для того чтобы получить доступ к полям и методам класса найденного аплета, мы должны преобразовать значение, полученное от метода nextElement, к ссылке на класс этого аплета.
Как это можно сделать?
Рассмотрим конкретный пример, использованный нами в приложении Inspector, полные исходные тексты которого вы найдете ниже.
Это приложение управляет работой аплета Audio, описанного в предыдущей главе и предназначенного для проигрывания звукового файла. В классе Audio определено поле auClip, в котором хранится ссылка на интерфейс AudioClip:
public class Audio extends Applet
{
private String m_ClipName = "kaas.au";
private final String PARAM_ClipName = "ClipName";
AudioClip auClip;
. . .
}
Аплет Inspector получает доступ к полю auClip и вызывает методы, предназначенные для управления проигрыванием звукового файла. Таким образом, аплет Inspector пользуется полем auClip, определенным в другом аплете.
Чтобы это стало возможным, в исходном тексте аплета Inspector импортируется класс Audio, как это показано ниже:
import java.applet.*;
import java.awt.*;
import java.util.*;
import Audio;
Когда в процессе поиска аплетов аплет Inspector обнаруживает аплет Audio, он сохраняет ссылку на этот аплет в поле appAudio, выполняя явное преобразование типов:
Audio appAudio = null;
. . .
if(appName.equals("Name: Audio"))
{
appAudio = (Audio)currentApplet;
}
Теперь, пользуясь значением из поля appAudio, можно обращаться к полю auClip, определенному в аплете Audio:
appAudio.auClip.play();