Java_Lecture5.ppt
- Количество слайдов: 73
Обработка событий Событие – объект специального класса, описывающий изменение состояния объекта источника. Классы для обработки событий находятся в пакете java. awt. event 1
Обработка событий Классы событий Event. Object Action. Event AWTEvent Container. Event Adjustment. Event Focus. Event Component. Event Paint. Event Item. Event Window. Event Text. Event Input. Event Key. Event Mouse. Event 2
Обработка событий Классы событий Методы класса Event. Object: - Object get. Source() – ссылка на объектисточник события - String to. String() – текстовое описание события 3
Обработка событий Источники событий Источник Событие Когда возникает JButton Action. Event Нажата кнопка JCheck. Box Item. Event Сброс/установка флажка JRadio. Button Item. Event Сброс/установка флажка JCombo. Box Action. Event Item. Event Выбор элемента списка Изменение состояния элемента JList. Selection Event Изменение состояния элемента JMenu. Item Action. Event Item. Event Изменилось сост-е пункта меню То же для пункта с меткой 4
Обработка событий Источники событий Источник Событие Когда возникает JScrollbar Adjustment. Event Манипуляции с полосами прокрутки JText. Field JText. Area Text. Event Ввод символов JFrame JWindow Jdialog Window. Event Любые действия с окном (открыть/закрыть, свернуть/развернуть и т. п. ) Все органы управления Focus. Event Компонент получает или теряет фокус ввода Все Container. Event контейнеры Компонент добавляется или удаляется из контейнера 5
Обработка событий Уровни событий Высокоуровневые: все вышеперечисленные. Низкоуровневые: Key. Event, Mouse. Event (move) - low Mouse. Event (click) – low Action. Event - high 6
Обработка событий Интерфейсы - слушатели Для каждого типа событий существует свой интерфейсслушатель: Action. Event – Action. Listener Item. Event – Item. Listener Window. Event – Window. Listener и т. д. … В интерфейсе-слушателе описаны методы, обрабатывающие события данного класса. 7
Обработка событий Блоки прослушивания Блок прослушивания – класс, реализующий интерфейс-слушатель (реализующий все его методы). Для обработки события необходимо: 1. Создать блок прослушивания 2. Связать блок прослушивания с источником события 8
Обработка событий Блоки прослушивания Чтобы связаться с блоком прослушивания, классы-источники события должны получить ссылку на экземпляр блока прослушивания (класса-обработчика события) – зарегистрировать блок прослушивания: public void add. Type. Listener(Type. Listener obj) где Type – это имя события, obj – ссылка на экземпляр класса-обработчика события. Методы, которые регистрируют блок прослушивания, обеспечиваются генерирующим событие источником. 9
Обработка событий Блоки прослушивания: унивещание Интерфейсслушатель Источник события implements Блок прослушивания add. Type. Listener(Type. Listener obj) 10
Обработка событий Блоки прослушивания: мультивещание add. Type. Listener(Type. Listener obj) Блок прослушивания 1 Источник события add. Type. Listener(Type. Listener obj) Блок прослушивания 2 Блок прослушивания 3 11
Обработка событий С помощью отдельного класса class Text. Move implements Action. Listener { private JText. Field jtf; Text. Move(JText. Field jtf) { this. jtf = jtf; } public void action. Performed(Action. Event obj) { jtf. set. Text("Button pressed"); } } 12
Обработка событий С помощью отдельного класса class My. Notebook extends JFrame {public static void main(String args[ ]) {JFrame jf = new JFrame(“Обработка события Action. Event"); Container cp = jf. get. Content. Pane(); jf. set. Layout(new Flow. Layout()); JButton jb = new JButton("OK"); JText. Field jtf = new JText. Field(20); cp. add(jb); cp. add(jtf); jb. add. Action. Listener(new Text. Move(jtf)); jf. set. Visible(true); } } 13
Обработка событий С помощью отдельного класса 14
Обработка событий Внутри класса-источника class My. Notebook extends JFrame implements Action. Listener {private JText. Field jtf; public static void main(String args[ ]) {JFrame jf = new JFrame(“Обработка события Action. Event"); Container cp = jf. get. Content. Pane(); jf. set. Layout(new Flow. Layout()); JButton jb = new JButton("OK"); JText. Field jtf = new JText. Field(20); 15
Обработка событий Внутри класса-источника cp. add(jb); cp. add(jtf); jb. add. Action. Listener(this); jf. set. Visible(true); } public void action. Performed(Action. Event obj) { jtf. set. Text("Button pressed"); } } 16
Обработка событий С помощью вложенного класса class My. Notebook extends JFrame {private JText. Field jtf; public static void main(String args[ ]) {JFrame jf = new JFrame(“Обработка события Action. Event"); Container cp = jf. get. Content. Pane(); jf. set. Layout(new Flow. Layout()); JButton jb = new JButton("OK"); JText. Field jtf = new JText. Field(20); 17
Обработка событий С помощью вложенного класса cp. add(jb); cp. add(jtf); jb. add. Action. Listener(new Text. Move()); jf. set. Visible(true); } class Text. Move implements Action. Listener {public void action. Performed(Action. Event obj) { jtf. set. Text("Button pressed"); } } 18
Обработка событий Методы интерфейса Action. Listener void action. Performed(Action. Event obj) Методы интерфейса Adjustment. Listener void adjustment. Value. Changed(Adjustment. Event obj) 19
Обработка событий Методы интерфейса Component. Listener void Component. Resized(Component. Event obj) void Component. Moved(Component. Event obj) void Component. Shown(Component. Event obj) void Component. Hidden(Component. Event obj) Методы интерфейса Container. Listener void component. Added(Container. Event obj) void component. Removed(Container. Event obj) 20
Обработка событий Методы интерфейса Focus. Listener void focus. Gained(Focus. Event obj) void focus. Lost(Focus. Event obj) Методы интерфейса Item. Listener void Item. State. Changed(Item. Event obj) Методы интерфейса Key. Listener public void key. Typed(Key. Event obj); public void key. Pressed(Key. Event obj); public void key. Released(Key. Event obj); 21
Обработка событий Методы интерфейса Mouse. Listener public void mouse. Clicked(Mouse. Event obj); public void mouse. Pressed(Mouse. Event obj); public void mouse. Released(Mouse. Event obj); public void mouse. Entered(Mouse. Event obj); public void mouse. Exited(Mouse. Event obj); Методы интерфейса Mouse. Motion. Listener public void mouse. Dragged(Mouse. Event obj); public void mouse. Moved(Mouse. Event obj); 22
Обработка событий Методы интерфейса Text. Listener void text. Value. Changed(Text. Event obj) Методы интерфейса Window. Listener public void window. Opened(Window. Event obj); public void window. Closing(Window. Event obj); public void window. Activated(Window. Event obj); public void window. Deactivated(Window. Event obj); public void window. Iconified(Window. Event obj); public void window. Deiconified(Window. Event obj); 23
Обработка событий Классы-адаптеры Для реализации интерфейса-слушателя необходимо определить все его методы. Если необходимо обрабатывать в программе только некоторые из событий, обработка которых предусматривается конкретным интерфейсом-слушателем, а все прочие игнорировать, то можно воспользоваться специальным классами, которые называются классами-адаптерами. Классыадаптеры обеспечивают пустую реализацию всех методов интерфейса, что дает возможность наследовать классобработчик события от класса-адаптера и реализовывать в нем не все методы интерфейса, а лишь те которые необходимы. 24
Обработка событий Классы-адаптеры Список классов-адаптеров: - Component. Adapter - Container. Adapter - Focus. Adapter - Key. Adapter - Mouse. Motion. Adapter - Window. Adapter 25
Апплеты Апплет – это небольшая программа динамически загружаемая по сети вместе с HTML-страницами и выполняемая WEB-браузером или специальной программой просмотра апплетов. Апплеты не нуждаются в окне верхнего уровня – его роль выполняет окно браузера. Поскольку для запуска апплетов не используется JVM, нет необходимости в методе main(). Ссылка на откомпилированный код апплета (. class-файл) включается в HTML-документ с помощью тега <applet>. 26
Апплеты С точки зрения Java, апплет – это всякое расширение класса JApplet, который, в свою очередь, расширяет класс Panel. Таким образом, апплет – это панель специального вида, контейнер для размещения компонентов с дополнительными свойствами и методами. Менеджером размещения компонентов в классе JApplet по умолчанию является Border. Layout. 27
Апплеты Скелетная схема апплета public class Applet. Skel extends JApplet {public void init() { //инициализация } public void start() { //начало или продолжение выполнения } public void stop() { //приостанавливает выполнение } public void destroy() { //выполняет завершающие действия } } 28
Апплеты Метод init() вызывается только один раз, когда браузер загружает в свое окно документ HTML с тегом <applet>, ссылающимся на данный апплет. В этот момент апплет может инициализировать переменные, или, например, создавать потоки, если он работает в многопоточном режиме. 29
Апплеты Метод start() вызывается сразу же после метода init(). Он также используется в качестве стартовой точки для возобновления работы после того, как апплет был остановлен. В отличие от init(), start() вызывается каждый раз при выводе HTMLдокумента, содержащего апплет, на экран. Если пользователь перейдет к новой WWWстранице, а затем вернется назад к странице с апплетом, апплет продолжит работу с метода start(). 30
Апплеты Метод stop() вызывается, когда надо приостановить выполнение апплета, не выгружая его из памяти. Также метод stop() всегда вызывается перед методом destroy(). 31
Апплеты Метод destroy() вызывается, когда апплет должен быть удален из памяти. В этом методе необходимо освободить любые системные ресурсы, захваченные апплетом. 32
Апплеты Отображение информации в апплетах public class My. Applet extends JApplet { public void init() {Container cp = get. Content. Pane(); cp. set. Layout(new Flow. Layout()); cp. add(new JLabel("Applet!")); JButton jb = new JButton("OK"); cp. add(jb); } public void start() { } public void stop() { } } 33
Апплеты Отображение информации в апплетах public class Test extends JApplet {public void init() { Container cp = get. Content. Pane(); cp. set. Layout(new Border. Layout()); cp. add(new Drawing. Canvas(), Border. Layout. CENTER); cp. add(new JButton("test"), Border. Layout. NORTH); cp. add(new JLabel("test"), Border. Layout. SOUTH); } 34
Апплеты Отображение информации в апплетах private static class Drawing. Canvas extends JPanel {public Drawing. Canvas() { set. Preferred. Size(new Dimension(200, 200)); } protected void paint. Component(Graphics g) { g. draw. Rect(10, 100, 50); } } } 35
Апплеты Выполнение апплетов Код апплета *. java Байт-код апплета *. class Web-page *. htm Web-browser 36
Апплеты Тег <applet> <HTML> <BODY> <applet code = "My. Applet" width = 300 height = 100> </applet> </BODY> </HTML> 37
Апплеты Тег <applet> <applet CODE = applet. File WIDTH = pixels HEIGHT = pixels [CODEBASE = codebase. URL] [ALT = alternative. Text] [NAME = applet. Instance. Name] [ALIGN = alignment] [VSPACE = pixels HSPACE = pixels] [ARCHIVE = arc. Name] > [<param NAME = Attribute. Name VALUE = Attribute. Value>] [HTML-текст, если браузер не поддерживает апплеты] </applet> 38
Апплеты Тег <applet> CODEBASE – необязательный параметр, определяющий базовый URL-адрес кода апплета. Базовый URL – это каталог или адрес сайта в Internet, в котором будет разыскиваться исполняемый файл апплета. Если атрибут CODEBASE не определен, то используется базовый URL текущего HTML-документа. ALT - необязательный параметр, используемый для указания короткого текстового сообщения, которое должно быть отображено, если браузер понимает тег <applet>, но не может выполнить Java-апплет. 39
Апплеты Тег <applet> NAME – необязательный параметр, используемый для определения имени экземпляра апплета. Апплеты должны быть названы для обеспечения поиска и связи сними других апплетов. ALIGN – необязательный параметр, задающий стиль выравнивания апплета. Этот параметр может принимать значения – LEFT, RIGHT, TOP, TEXTTOP, MIDDLE, ABSMIDDLE, BASELINE, BOTTOM, ABSBOTTOM. VSPACE и HSPACE – необязательные параметры, определяющие пустой интервал выше и ниже области показа апплета (в пикселах). 40
Апплеты Тег <applet> Параметры ALIGN, HSPACE и VSPACE трактуются так же как в HTML-теге <img>. ARCHIVE – необязательный параметр, задающий список jar-файлов (разделенный запятыми), которые предварительно загружаются в Web-браузер. В этих архивных файлах могут содер-жаться файлы классов, изображения, звуки и любые другие ресурсы, необходимые апплету. <param> – вложенный тег <param> позволяет указывать на HTML-странице параметры, кото-рые необходимо передать апплету. 41
Апплеты Передача параметров в апплет производится с помощью тегов <param>. В них указывается название параметра name и его значение value. Для приема каждого параметра необходимо воспользоваться методом get. Parameter() класса Applet. Формат этого метода: String get. Parameter(String name) В качестве аргумента этого метода задается имя параметра в виде строки, а метод возвращает значение параметра также в виде строки. 42
Апплеты Передача параметров в апплеты public class My. Applet extends Applet {public void init() {String pr="0", pg="0", pb="0"; int rc, bc, gc; pr = get. Parameter("Red"); pg = get. Parameter("Green"); pb = get. Parameter("Blue"); rc = (new Integer(pr)). int. Value (); bc = (new Integer(pb)). int. Value (); gc = (new Integer(pg)). int. Value (); set. Background(new Color(rc, bc, gc)); } } 43
Апплеты Передача параметров в апплеты <HTML> <BODY> <applet code = "My. Applet" width = 300 height = 100> <param name=Red value=20> <param name=Green value=200> <param name=Blue value=200> <param name=Str value="Testing string"> </applet> </BODY> </HTML> 44
Апплеты Сведения об окружении апплета URL get. Code. Base() - возвращает URL-адрес каталога, в котором лежит файл с кодом апплета. URL get. Document. Base() - возвращает URL-адрес каталога, в котором лежит HTML-файл, вызвавший апплет. 45
Апплеты Интерфейс Applet. Context В пакете java. applet есть интерфейс Applet. Context, который позволяет получать информацию из среды выполнения апплета. Апплет может получить ссылку на этот интерфейс методом Applet. Context get. Applet. Context() класса Applet. Интерфейс Applet. Context реализован Internet-браузером. 46
Апплеты Интерфейс Applet. Context Методы интерфейса Applet. Context: Applet get. Applet(String name) Enumeration get. Applets() show. Document(URL address, String target) - загружает файл во фрейм, указанный вторым аргументом target: 47
Апплеты Интерфейс Applet. Context • _self – то же окно и тот же фрейм, в котором работает апплет • _parent – родительский фрейм апплета • _top – фрейм верхнего уровня окна апплета • _blank – новое окно верхнего уровня • name – фрейм или окно с именем name, если оно не существует, то будет создано. 48
Апплеты Интерфейс Applet. Context public class My. Applet extends Applet {public void start() {Applet. Context ac = get. Applet. Context(); URL url = get. Code. Base(); try {ac. show. Document(new URL(url+"1. htm"), "_blank"); } catch (Malformed. URLException obj) {System. out. println("URL not found"); } } } 49
Апплеты Изображения и звук в апплетах Изображение в Java – это объект класса Image, представляющий прямоугольный массив пикселов. Этот массив может быть сформирован непосредственно, а может быть получен из графического файла, типа GIF или JPEG одним из методов класса JApplet: Image get. Image(URL address) Image get. Image(URL address, String filename) 50
Апплеты Изображения и звук в апплетах Выполнение одного из этих методов позволяет только получить ссылку на объект класса Image, при этом фактической загрузки изображения в оперативную память не происходит. Для загрузки: draw. Image(Image img, int x, int y, Image. Observer obs) draw. Image(Image img, int x, int y, int width, int height, Image. Observer obs) Метод draw. Image() начинает загружать изображение в память и рисовать его на экране, не дожидаясь окончания загрузки. 51
Апплеты Изображения и звук в апплетах Звук в апплетах представляется с помощью интерфейса Audio. Clip, который, также как и интерфейс Applet. Context, реализуется браузером. Ссылку на звуковой файл типа. au, . aiff, . wav, . midi, можно получить с помощью методов следующих методов класса Applet: Audio. Clip get. Audio. Clip(URL address) Audio. Clip get. Audio. Clip(URL address, String filename) 52
Апплеты Изображения и звук в апплетах Аналогично методу get. Image() метод get. Audio. Clip() фактически не производит загрузку звукового файла, а только получает ссылку на него. Для загрузки в интерфейсе Audio. Clip определено 3 метода: void play() void loop() void stop() Первый метод воспроизводит звуковой файл один раз, второй – циклически до выгрузки апплета из памяти или вызова метода stop(), который прекращает воспроизведение. 53
Апплеты Изображения и звук в апплетах public class My. Applet extends JApplet { Audio. Clip ac; public void init() { Container cp = get. Content. Pane(); cp. set. Layout(new Flow. Layout()); cp. add(new JLabel("Applet!")); JButton jb = new JButton("OK"); cp. add(jb); cp. add(new Drawing. Canvas()); ac = get. Audio. Clip(get. Document. Base(), "1. wav"); } 54
Апплеты Изображения и звук в апплетах public void start() {ac. loop (); } public void stop() {ac. stop (); } public void destroy() { } private class Drawing. Canvas extends JPanel { Image img; public Drawing. Canvas() { set. Preferred. Size(new Dimension(200, 200)); img = get. Image(get. Document. Base(), "3. jpg"); } protected void paint. Component(Graphics g) { g. draw. Image(img, 10, 30, Color. cyan, null); } } } 55
Апплеты Безопасность апплетов Выполнение на локальной машине апплетов, загруженных по сети, может представлять потенциальную угрозу безопасности (например, с его помощью можно получить несанкционированный доступ к пользовательской информации, перехватить пароли доступа и т. п. ). Поэтому браузеры обеспечивают защиту от несанкционированных действий со стороны апплета. Параметры такой защиты определяют, какие действия разрешается выполнять апплету при работе на локальной машине. Уровень защиты может устанавливаться пользователем и регулироваться в достаточно широком диапазоне. 56
Апплеты Безопасность апплетов 57
Апплеты Безопасность апплетов По умолчанию апплеты не могут: • обращаться к файловой системе компьютера, на котором он выполняется • связаться по сети с сайтом, отличным от того, с которого он был загружен • выполнять печать на локальном принтере • пользоваться буфером обмена (clipboard) • запускать другие приложения и загружать динамические библиотеки • остановить JVM • создавать классы в пакетах java. *, а классы из пакетов sun. * не может даже загружать 58
VE – Visual Editor Разработка GUI c помощью визуального редактора VE – Visual Editor. Плагин для среды разработки Eclipse IDE. • Позволяет работать с графическими библиотеками Java Swing и Java AWT. • Упрощает работу с компонентами • Поддерживает менеджеры компоновки • Автоматическое добавление обработчиков (слушателей) событий. 59
VE – Visual Editor Установка http: //www. eclipse. org/vep/ • Скачать VE zip. Распаковать в папку dropins в папке где установлен Eclipse. Перезапустить Eclipse. • Зайти в Eclipse – Help->Install New Software. Нажать кнопку Add и указать путь к архиву. Может потребоваться соединение с интернетом. 60
61
62
VE – Visual Editor Три представления • Design – как будет выглядеть окно • Source - исходный код • Palette - палитра графических элементов • Properties – просмотр и установка свойств компонента. • Java Beans – дерево вложенности компонентов 63
Design Palette Source Properties Java Beans 64
Visual Editor. Типовые операции. Открыть класс в редакторе Чтобы открыть существующий класс в визуальном редакторе: • Package Explorer - выберите исходный файл. java • Open With > Visual Editor из выпадающего меню. Создание нового визуального класса • File -> New -> Visual Class • Name - имя класса • Style – выбрать родительский класс: • JFrame • Japplet • …. . 65
66
Добавление компонентов и изменение их свойств • Добавление компонентов – путем перетаскивания с панели • Изменение Layout Manager – в контекстном меню панели окна или апплета – Customize Layout или Set Layout • Убрать менеджер компонентов set. Layout. Manager(null) – в коде В этом случае можно изменять размещение и размер компонентов вручную 67
Добавить надпись на компонент 68
Переупорядочивание компонентов 69
Изменение размеров компонентов 70
Добавление обработчиков событий 71
Добавление события 72
Выравнивание элементов
Java_Lecture5.ppt