МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Каф.САПР
Програмування аплетів в Java. Обробка подій в Java.
до лабораторної роботи №10
1. МЕТА РОБОТИ
Одержати навики використання апелів в мові Java. Одержати навички роботи із обробниками подій.
2.ОСНОВНІ ТЕОРЕТИЧНІ ВІДОМОСТІ
Аплет
До сих пір ми створювали додатки (applications), працюючі самостійно (standalone) в JVM під управлінням графічної оболонки операційної системи. Ці додатки мали власне вікно верхнього рівня типу Frame, зареєстроване у віконному менеджері (window manager) графічної оболонки. Крім додатків, мова Java дозволяє створювати аплети (applets). Це програми, що працюють в середовищі іншої програми - браузера. Аплету не потрібне вікно верхнього рівня - ним служить вікно браузера. Вони не запускаються JVM — їх завантажує браузер, котрий сам запускає JVM для виконання аплету. Ці особливості відбиваються на написанні програми аплета.
З точки зору мови Java, аплет — це всяке розширення класу Applet, котрий, в свою чергу, розширяє клас Panel. Таким чином, аплет - це панель спеціального виду, контейнер для розміщення компонентів з додатковими властивостями і методами. Менеджером розміщення компонентів по замовчуванню, як і в класі Panel, служить FІowLayout. Класс Applet знаходиться в пакеті java.applet, в якому крім нього є тільки три інтерфейси, реалізовані в браузері. Треба відмітити, що не всі браузери реалізують ці інтерфейси повністю.
Оскільки JVM не запускає аплет, відпадає необхідність в методi main(), його немає в аплетах. В аплетах рідко зустрічається конструктор. Справа в тому, що при запуску першого створюється його контекст. Під час виконання конструктора контекст ще не сформований, тому не всі початкові значення вдається визначити в конструкторі. Початкові дії, зазвичай виконувані в конструкторі і методі main(), в аплеті записуються в метод init() класу Applet. Цей метод автоматачно запускається виконуючою системою Java браузера зразу ж після завантаження аплета.
Виконання аплета
Компілятор створює файл ХХХ.class, але скористатися для його виконання інтерпретатором java тепер не можна немає методу main(). Замість інтерпретації треба дати вказівку браузеру для запуску аплета. Всі вказівки браузеру даються помітками, тегами (tags), на мові HTML (HyperText Markup Language). Зокрема, вказівка на запуск аплета даєтсья в тезі <applet>. В ньому обовязково задається імя файла з класом аплета параметром code, ширина width і висота height панелі аплета в пікселях.
Лістинг Файл HTML для завантаження аплета ХХХ
<html>
<head><title> Applet</title></head> <body>
<br>
<applet code = "ХХХ.class" width = "200" height = "100">
</applet>
</body>
</html>
Цей текст заноситься в файл з розсширенням html або htm, наприклад HelloWorld.html. Імя файла довільне, ніяк не звязано з аплетом або класом апплета. Обидва файли — HelloWorld.html і HelloWorld.class - поміщаються в один каталог на сервері, і файл HelloWorld.html завантажується в браузер, який може знаходитися в будь-якому місці Internet. Браузер, проглядаючи HTML-файл, виконає тег <appІet> і завантажить аплет. Після завантаження аплет зявиться у вікні браузера
Завдання
Зміна кольору рамки навколо зображення в графічному вікні. При клацанні по зображенню колір рамки навколо зображення циклічно міняється на червоний, синій, зелений колір і колір фону.
Код програми
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JApplet;
public class class1 extends JApplet
implements MouseListener{
public class1() {
addMouseListener(this);
}
public int i=0;
public void mousePressed(MouseEvent arg0) {
if((arg0.getX()>=275)&&(arg0.getX()<=325)&&
(arg0.getY()>=275)&&(arg0.getY()<=325)){
Graphics u= getGraphics();
i++;
switch(i%4){
case 0:{u.setColor(Color.BLUE); break;}
case 1:{u.setColor(Color.GREEN); break;}
case 2:{u.setColor(Color.RED); break;}
case 3:{u.setColor(Color.WHITE); break;}
}
u.fillRect(265,265,70, 10);
u.fillRect(265,265,10, 70);
u.fillRect(325,265,10, 70);
u.fillRect(265,325,70, 10);
}
}
public void paint(Graphics gr){
gr.setColor(Color.YELLOW);
gr.fillRect(275,275,50, 50);
}}
Ran.html
<html>
<head><title> Applet</title></head> <body>
<br>
<applet code = "class1.class" width = "500" height = "500">
</applet>
</body>
</html>
Висновок:
Одержали навики використання апелів в мові Java. Одержали навички роботи із обробниками подій.