Сценарии JavaScript в активных страницах Web© Александр Фролов, Григорий ФроловТом 34, М.: Диалог-МИФИ, 1998, 288 стр. Доступ к полям аплета Java из сценария JavaScriptВ предыдущем примере сценарий JavaScript вызывал методы, определенные в аплете Java. В следующем примере сценарий будет обращаться к полю, определенному в главном классе аплета. Заметим, что сценарию JavaScript доступны только те поля и методы аплета, определенные как public. На рис. 6.2 показан внешний вид документа HTML, в котором расположен один аплет и форма с одним многострочным текстовым полем и одной кнопкой. Рис. 6.2. Сценарий JavaScript вызывает получает информацию от аплета В окне аплета, расположенном в верхней части документа, находится поле редактирования текста и кнопка с надписью “Получить строку”. Если набрать в поле редактирования любую текстовую строку и нажать эту кнопку, то введенная строка будет отображена в нижней части аплета после символа >. Такой аплет мы описали в 30 томе “Библиотеки системного программиста” в разделе “Приложение TxtField” пятой главы. Если нажать кнопку “Get applet info and text”, то сценарий JavaScript извлечет из аплета введенную текстовую строку (она хранится в поле с именем str), а также получит описание аплета, вызвав метод getAppletInfo, определенный в нашем аплете. Введенная строка и информация об аплете будет затем отображена сценарием в многострочном поле редактирования, как это показано на рис. 6.2. Таким образом, наш сценарий обращается к полю и методу, определенным в аплете. Исходный текст документа HTML вы найдете в листинге 6.3. Листинг 6.3. Файл chapter6/TxtField/TxtField.html <HTML> <HEAD> <TITLE>Get text</TITLE> <SCRIPT LANGUAGE="JavaScript"> <!-- function getTextFromApplet() { var szMsg="null"; GetForm.Comment.value = document.applets[0].str + "\n" + "---------------------------\n" + document.applets[0].getAppletInfo(); } // --> </SCRIPT> </HEAD> <BODY> <HR> <APPLET CODE=TxtField.class NAME="TxtField" ID=TxtField WIDTH=320 HEIGHT=140> </APPLET> <HR> <FORM NAME="GetForm"> <P><TEXTAREA NAME="Comment" ROWS="7" COLS="45"> </TEXTAREA> <P> <INPUT TYPE="button" VALUE="Get applet info and text" onClick="getTextFromApplet();"> </FORM> <A HREF="TxtField.java">The source.</a> </BODY> </HTML> Для кнопки, расположенной в форме с именем GetForm, мы определили обработчик события onClick: onClick="getTextFromApplet();" Этот обработчик вызывает функцию getTextFromApplet, выполняющую взаимодействие с аплетом. Функция getTextFromApplet обращается к аплету как к самому первому элементу массива document.applets[0]: GetForm.Comment.value = document.applets[0].str + "\n" + "---------------------------\n" + document.applets[0].getAppletInfo(); Здесь мы записываем в свойство value многострочного поля GetForm.Comment значение переменной str, к которому добавлен разделитель из символов “-“ и строка описания аплета, полученная от метода getAppletInfo. Исходный текст аплета приведен в листинге 6.4. Листинг 6.4. Файл chapter6/TxtField/TxtField.java // ========================================================= // Однострочное текстовое поле класса TextField // // (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.*; public class TxtField extends Applet { // Создаем ссылку на объекты типа TextField TextField txt; // Создаем ссылку на объекты типа Button Button btnGetText; // Строка для хранения введенных данных public String str; // ------------------------------------------------------- // getAppletInfo // Метод, возвращающей строку информации об аплете // ------------------------------------------------------- public String getAppletInfo() { return "Name: TxtField\r\n" + "Author: Alexandr Frolov\r\n" + "E-mail: frolov@glas.apc.org\r\n" + "WWW: http://www.glasnet.ru/~frolov\r\n" + "Created with Microsoft Visual J++ Version 1.0"; } // ------------------------------------------------------- // init // Метод, получающий управление при инициализации аплета // ------------------------------------------------------- public void init() { // Создаем редактируемое однострочное текстовое поле txt = new TextField("Введите строку текста", 35); // Создаем кнопку, с помощью которой можно получить // содержимое текстового поля btnGetText = new Button("Получить строку"); // Добавляем текстовое поле в окно аплете add(txt); // Добавляем кнопку в окно аплете add(btnGetText); // Получаем и сохраняем текущий текст, // установленный в поле str = txt.getText(); // Устанавливаем цвет фона setBackground(Color.yellow); } // ------------------------------------------------------- // action // Метод вызывается, когда пользователь выполняет // действие над компонентами // ------------------------------------------------------- public boolean action(Event evt, Object obj) { // Ссылка на кнопку, от которой пришло сообщение Button btn; // Проверяем, что событие вызвано кнопкой, а не // другим компонентом if(evt.target instanceof Button) { // Получам ссылку на кнопку, вызвавшую событие btn = (Button)evt.target; // Проверяем ссылку на кнопку if(evt.target.equals(btnGetText)) { // Получаем и сохраняем текущий текст, // установленный в поле str = txt.getText(); // Перерисовываем окно аплета repaint(); } // Если событие возникло от неизвестной кнопки, // мы его не обрабатываем else { return false; } // Возвращаем признак того, что мы обработали событие return true; } // Если событие вызвано не кнопкой, // мы его не обрабатываем return false; } // ------------------------------------------------------- // paint // Метод paint, выполняющий рисование в окне аплета // ------------------------------------------------------- public void paint(Graphics g) { // Определяем текущие размеры окна аплета Dimension dimAppWndDimension = size(); // Выбираем в контекст отображения черный цвет g.setColor(Color.black); // Рисуем рамку вокруг окна аплета g.drawRect(0, 0, dimAppWndDimension.width - 1, dimAppWndDimension.height - 1); // Рисуем строку, полученную из текстового поля g.drawString("> " + str, 10, 100); } } Этот текст воспроизведен нами с небольшими изменениями из 30 тома “Библиотеки системного программиста”. Изменения заключаются в том, что мы добавили к определению поля str ключевое слово public: public String str; Это необходимо для того чтобы поле str было доступно из сценария JavaScript. |