Реализация взаимодействия между апплетами. Изучения механизма передачи информации из одного апплета в другой

Страницы работы

Фрагмент текста работы

апплет окрашивается в тот цвет, который соответствует радиокнопке.

Строка Applet receiver=null; объявляет receiver как переменную типа Applet и присваивает ей изначально пустое значение null. Следующие две строки:

  String receiverName="ReceiverApplet";

  receiver=getAppletContext().getApplet(receiverName);

объявляют строковую переменную receiverName и возвращают в переменную receiver указатель на апплет, содержащий в параметре value значение переменной receiverName, т.е. ‘ReceiverApplet’. Запомним эту команду:

receiver=getAppletContext().getApplet(receiverName);

Далее в программе идет проверка того, что мы получили действительно нужный апплет:

{ if (!(receiver instanceof Receiver))

   {showStatus("Not an applet we have been looking for");

}

   else

   {showStatus("OK");

Обратим внимание на следующее. Receiver – это экземпляр (объект) класса Receiver, определенного в файле Receiver.java. Команда

if (!(receiver instanceof Receiver))

как раз и проверяет, что receiver является экземпляром  класса Receiver. Результаты проверки просто отображаются в виде информационной строки в строке статуса апплета командой: showStatus("...   . Если результат проверки положителен, то вслед за командой:

showStatus("OK");

выполняется  “главная команда в этой лабораторной работе” :

((Receiver) receiver).processRequest(returnValue());

Эта команда вызывает метод processRequest из другого апплета и передает ему единственный параметр – результат выполнения метода returnValue().  Вызов вида

receiver.processRequest(returnValue());

принципиально не пройдет, так как JAVA будет считать в этом случае receiver классом или экземпляром класса, объявленного в данном файле или в одном из импортируемых файлов,  но никак не в другом апплете. Так что следует запомнить и этот вариант вызова. Метод returnValue не требует каких-либо дополнительных разъяснений. Рассмотрим теперь файл Receiver.java:

import java.applet.*;

import java.awt.*;

import java.awt.event.*;

import java.net.*;

public class Receiver extends Applet

{  private String receivedMsg="Red";

private Label label=new Label("zdem",Label.CENTER);

public Button btnShow= new Button("HTML-page");

URL myurl=null;

String s;

public void init()

{  setLayout(null);

add(label);

add(btnShow);

label.setBounds(10,10,200,20);

btnShow.setBounds(10,50,80,20);

showStatus("init is working");

repaint();

try{

s="file:/C:/Program Files/bin/lab2.html";

myurl=new URL(s);  

label.setText(""+ myurl);

}

catch(MalformedURLException e)

{showStatus("error of url"+e.getMessage());

label.setText("Badforurl");

}

}

public boolean action(Event evt,Object arg)

{

if (evt.target instanceof Button)

{

label.setText("changing url");

getAppletContext().showDocument(myurl,"_blank");

return(true);

}

return false;}

public void paint(Graphics g)

{

g.drawString("Hello",20,50);

if (receivedMsg.equals("Red"))

{ g.setColor(Color.red);}

else

if (receivedMsg.equals("Blue"))

{ g.setColor(Color.blue);}

else

g.setColor(Color.yellow);

g.fillRect(0,0,getSize().width,getSize().height);}

public void processRequest(String senderName)

{ label.setText(senderName);

receivedMsg=senderName;

repaint();}

}

Начнем с главного метода:

public void processRequest(String senderName)

{ label.setText(senderName);

  receivedMsg=senderName;

repaint();}

}

Данный метод отображает в текстовом поле label принятый текст из главного апплета, присваивает его переменной receivedMsg  и перерисовывает апплет с помощью команды repaint(), вызывающей метод paint() апплета. Рассмотрим метод paint().

public void paint(Graphics g)

{

g.drawString("Hello",20,50);

if (receivedMsg.equals("Red"))

{ g.setColor(Color.red);}

else

if (receivedMsg.equals("Blue"))

{ g.setColor(Color.blue);}

else

g.setColor(Color.yellow);

g.fillRect(0,0,getSize().width,getSize().height);}

Изменение цвета апплета выполняет команда : g.setColor(Color ...), которая устанавливает цвет для заливки, а саму заливку выполняет команда g.fillRect(0,0,getSize().width,getSize().height),знакомая нам по первой лабораторной работе. В заключении рассмотрим метод :

public boolean action(Event evt,Object arg)

{

if (evt.target instanceof Button)

{

label.setText("changing url");

getAppletContext().showDocument(myurl,"_blank");

return(true);

}

return false;}

Данный метод применяется для описания реакции на какое-либо событие от визуального компонента, например, кнопки. Этот метод использовался в начальных версиях JAVA и сохранен для совместимости, так как взамен используется метод actionPerformed. Подробно останавливаться на методе action мы здесь не будем. Отметим, что параметр evt класса Event имеет ряд свойств, причем свойство target определяет объект, инициировавший событие. Другими важными свойствами параметра evt являются:

key – код клавиши для события от клавиатуры;

when – время происхождения события;

x,y – координаты курсора мыши при возникновении события;

id – идентификатор типа события (целое число).

Второй аргумент метода action позволяет конкретизировать объект, выдавший событие. Это делается, например, следующей командой:

If (arg.equals(“SEND”)) {...}  Метод equals() здесь используется для проверки названия кнопки. Запомните, что в конце метода action следует указать команду return false  , если предполагается, что окончательная обработка событий не завершена в методе action или return true, если никакая дальнейшая обработка событий не предполагается. Иначе говоря, метод action может обрабатывать только часть событий, остальные должны переадресовываться операционной системе.

Теперь остается последняя нерассмотренная команда обработчика action:

getAppletContext().showDocument(myurl,"_blank");

Эта команда отображает в окне документ с сетевым адресом myurl (обратите внимание, как он формируется в программе). Второй параметр blank указывает, что новый документ должен открываться в новом окне. Другие варианты:

parent – документ открывается в родительском окне;

top – документ открывается в верхней части окна броузера.

Итак, мы полностью рассмотрели вызов апплета из другого апплета либо с помощью комманды showDocument.

ЗАДАНИЕ НА ВЫПОЛНЕНИЕ.

Вариант 1. Передать в другой апплет объекттипа Image;

Вариант 2. Передать в другой апплет и отобразить время часы:минуты:секунды.

Для получения времени создать объект типа Date:

Date now= new Date();

Для получения часов использовать now.getHours(); минут – now.getMinutes();

Секунд – now.getSeconds();

Вариант 3. Передать в другой апплет сетевой url третьего апплета и показать его с помощью showDocuments();

Вариант 4. Передать в другой апплет код клавиши (стрелка вверх, стрелка вниз, стрелка вправо, стрелка влево , и в соответствии с переданным кодом клавиши рисовать линию методом drawLine.

Вариант 5. Управлять размерами отображаемой окружности во втором апплете

Похожие материалы

Информация о работе