Сценарии JavaScript в активных страницах Web© Александр Фролов, Григорий ФроловТом 34, М.: Диалог-МИФИ, 1998, 288 стр. Вызов методов аплета Java из сценария JavaScriptСценарий JavaScript может получить доступ к полям и методам аплетов, расположенных в документе HTML, адресуясь к аплетам как к элементам массива document.applets. Например, для доступа к первому аплету вы можете использовать строку document.applets[0]. Однако удобнее указывать имя аплета, заданное в параметре NAME оператора <APPLET>, например document.MyApplet. В качестве примера покажем, как можно вызывать из сценария JavaScript методы аплета Rectangles, описанного нами в упомянутом выше 32 томе “Библиотеки системного программиста”. Этот аплет рисует в своем окне прямоугольники случайного размера, закрашенные случайным цветом. Мы создали документ HTML, разместив в нем аплет Rectangles и форму с кнопками Start Animation и Stop Animation (рис. 6.1). Рис. 6.1. Аплет Rectangles управляется кнопками с помощью сценария JavaScript Сразу после загрузки документа в окне аплета запускается процесс анимации. Если нажать кнопку Stop Animation, рисование новых прямоугольников будет приостановлено. С помощью кнопки Start Animation можно возобновить процесс рисования. Заметим, что если поместить курсор мыши в область окна аплета, анимация будет остановлена, а когда курсор мыши покинет пределы окна аплета - снова запущена. Однако такое поведение определяется самим аплетом и не имеет отношения к нашему сценарию JavaScript. Исходный текст документа HTML, содержащий аплет и форму с кнопками, представлен в листинге 6.1. Листинг 6.1. Файл chapter6/Rectangles/Rectangles.html <HTML> <HEAD> <TITLE>Rectangles</TITLE> </HEAD> <BODY> <HR> <APPLET CODE=Rectangles.class NAME="Rectangles" ID=Rectangles WIDTH=320 HEIGHT=240 > </APPLET> <HR> <FORM> <INPUT TYPE="button" VALUE="Start Animation" onClick="document.Rectangles.start()"> <INPUT TYPE="button" VALUE="Stop Animation" onClick="document.Rectangles.stop()"> </FORM> <A HREF="Rectangles.java">The source.</a> </BODY> </HTML> Здесь параметр NAME оператора <APPLET> задает имя аплета как Rectangles. Когда пользователь нажимает на кнопку Start Animation, управление получает обработчик события onClick, определенный следующим образом: onClick="document.Rectangles.start()" Этот обработчик вызывает метод start, определенный в аплете Rectangles. Этот метод запускает анимацию в окне аплета, если она была остановлена. Аналогично, обработчик события onClick кнопки Stop Animation вызывает метод stop, также определенный в аплете Rectangles и предназначенный для остановки анимации: onClick="document.Rectangles.stop()" Исходный текст аплета Rectangles мы воспроизвели в листинге 6.2. Подробное описание этого аплета вы найдете в разделе “Приложение Rectangles” первой главы 32 тома “Библиотеки системного программиста”. Листинг 6.2. Файл chapter6/Rectangles/Rectangles.java // ========================================================= // Рисование прямоугольников в отдельной задаче // // (C) Фролов А.В, 1997, 1998 // // E-mail: frolov@glas.apc.org // WWW: http://www.glasnet.ru/~frolov // или // http://www.dials.ccas.ru/frolov // ========================================================= import java.applet.*; import java.awt.*; import java.util.*; public class Rectangles extends Applet implements Runnable { // Ссылка на задачу рисования прямоугольников Thread m_Rectangles = null; // ------------------------------------------------------- // getAppletInfo // Метод, возвращающей строку информации об аплете // ------------------------------------------------------- public String getAppletInfo() { return "Name: Rectangles\r\n" + "Author: Alexandr Frolov\r\n" + "E-mail: frolov@glas.apc.org" + "WWW: http://www.glasnet.ru/~frolov" + "Created with Microsoft Visual J++ Version 1.0"; } // ------------------------------------------------------- // paint // Метод paint, выполняющий рисование в окне аплета // ------------------------------------------------------- public void paint(Graphics g) { // Определяем текущие размеры окна аплета Dimension dimAppWndDimension = size(); // Выбираем в контекст отображения желтый цвет g.setColor(Color.yellow); // Закрашиваем внутреннюю область окна аплета g.fillRect(0, 0, dimAppWndDimension.width - 1, dimAppWndDimension.height - 1); // Выбираем в контекст отображения черный цвет g.setColor(Color.black); // Рисуем рамку вокруг окна аплета g.drawRect(0, 0, dimAppWndDimension.width - 1, dimAppWndDimension.height - 1); } // ------------------------------------------------------- // start // Метод вызывается при первом отображении окна аплета // ------------------------------------------------------- public void start() { if (m_Rectangles == null) { m_Rectangles = new Thread(this); m_Rectangles.start(); } } // ------------------------------------------------------- // stop // Метод вызывается, когда окно аплета исчезает с экрана // ------------------------------------------------------- public void stop() { if (m_Rectangles != null) { m_Rectangles.stop(); m_Rectangles = null; } } // ------------------------------------------------------- // run // Метод, который работает в рамках отдельной задачи // Он рисует в окне аплета прямоугольники случайного // цвета, размера и расположения // ------------------------------------------------------- public void run() { // Получаем контекст отображения для окна аплета Graphics g = getGraphics(); // Определяем текущие размеры окна аплета Dimension dimAppWndDimension = size(); while (true) { int x, y, width, height; int rColor, gColor, bColor; // Выбираем случайным образом размеры // и расположение рисуемого прямоугольника x = (int)(dimAppWndDimension.width * Math.random()); y = (int)(dimAppWndDimension.height * Math.random()); width = (int)(dimAppWndDimension.width * Math.random()) / 2; height = (int)(dimAppWndDimension.height * Math.random()) / 2; // Выбираем случайный цвет для рисования // прямоугольника rColor = (int)(255 * Math.random()); gColor = (int)(255 * Math.random()); bColor = (int)(255 * Math.random()); // Устанавливаем выбранный цвет в контексте // отображения g.setColor(new Color(rColor, gColor, bColor)); // Рисуем прямоугольник g.fillRect(x, y, width, height); // Выполняем задержку на 50 миллисекунд try { Thread.sleep(50); } catch (InterruptedException e) { stop(); } } } // ------------------------------------------------------- // mouseEnter // Метод вызывается, когда курсор мыши оказывается над // окном аплета // ------------------------------------------------------- public boolean mouseEnter(Event evt, int x, int y) { if (m_Rectangles != null) { // Когда курсор мыши оказывается над поверхностью // окна аплета, временно приостанавливаем // задачу рисования прямоугольников m_Rectangles.suspend(); } return true; } // ------------------------------------------------------- // mouseExit // Метод вызывается, когда курсор мыши покидает // окно аплета // ------------------------------------------------------- public boolean mouseExit(Event evt, int x, int y) { if (m_Rectangles != null) { // Когда курсор мыши покидает окно аплета, // возобновляем работу задачи рисования // прямоугольников m_Rectangles.resume(); } return true; } } |