n Событие – объект, описывающий
изменение состояния источника
n Источник – объект, генерирующий
события
n Слушатель – объект, получающий
уведомление о событии
n Источник генерирует событие и посылает его одному или нескольким слушателям
n Слушатель просто ждет поступления события
n Получив событие, слушатель обрабатывает его и затем возвращает управление
Модель делегирования обработки событий
n Слушатели должны зарегистрироваться у источника – события посылаются только зарегистрировавшимся слушателям
n Логика кода, обрабатывающего события, отделена от логики интерфейса, генерирующего события
n Это реализация паттерна проектирования Observer
Слушатели и источники
n Один источник может генерировать несколько типов событий
n Один слушатель может быть слушателем нескольких видов событий
n Один слушатель может получать события одного вида от нескольких источников
n Слушатель может быть источником для других слушателей и для самого себя
n Источник может быть слушателем других источников и самого себя
События JavaBeans
n Класс слушателя должен наследовать от базового типа слушателя для вида событий EventListenerType
n Чтобы слушатель события мог быть зарегистрирован, компонент должен предоставлять метод
public void addEventListenerType(EventListenerType a)
n Чтобы слушатель события мог отказаться от регистрации, компонент должен предоставлять метод
public void removeEventListenerType(EventListenerType a)
n Если компонент позволяет регистрировать одновременно ограниченное количество обработчиков события, то метод добавления слушателя должен объявлять исключение
java . util . TooManyListenersException
n Работа с событиями также может вестись на уровне средства разработки
Вопрос 71 Вложенные типы, их классификация и особенности. Вложенные классы и интерфейсы. 45-48 Лекция Компонентная модель в ооп. Технология JavaBeans.
Синтаксически корректный код
class MyFirstClass {
public static void main(String[] args) {
// ...
}
class MySecondClass {
private int a, b;
public MySecondClass(int a, int b) {
this.a = a;
this.b = b;
}
//...
}
}
Вложенные типы
n Считаются частью внешнего типа, со всеми вытекающими правами
n Позволяют представить тип в виде логически связанных структурных групп и контекстов
n Простой и эффективный инструмент объединения семантики соотносимых объектов
Статические вложенные классы
n Nested class
n Простейшая форма вложенного класса
n Может использоваться любыми классами, обладающими соответствующими правами доступа
n Классы, вложенные в интерфейсы, статичны по определению
class ClassA {
int a = 10;
protected static class ClassB {
int b = 15;
}
}
public class Test {
public static void main(String[] args) {
ClassA.ClassB t = new ClassA.ClassB();
System.out.println(t.b);
}
}
Вложенные интерфейсы
n Всегда статичны (модификатор static по умолчанию)
n Доступ определяется доступом внешнего класса или интерфейса и модификаторами доступа
class ClassA {
public interface InterfaceB {
//...
}
//...
public InterfaceB get() {
//...
}
}
public class Test {
public static void main(String[] args) {
ClassA.InterfaceB t = (new ClassA()).get();
}
}
Вопрос 72 Внутренние, локальные и анонимные классы. 49-53. Лекция Компонентная модель в ооп. Технология JavaBeans.
Нестатические вложенные классы
n Называются внутренними (inner) классами
n Тип находится в контексте объекта
n Объект внутреннего класса всегда ассоциируется с т.н. внешним объектом
n Элементы внутреннего класса имеют доступ к полям и методам внешнего объекта
n Это позволяет создавать семейства сильно связанных объектов
Пример внутреннего класса
class ClassA {
private int a = 10;
protected class ClassB {
private int b = 15;
public int getA() { return a; }
public int getB() { return b; }
}
public ClassB get() { return new ClassB(); }
public void setB(int b, ClassB obj) {
obj.b = b;
}
}
public class Test {
public static void main(String[] args) {
ClassA objA = new ClassA();
ClassA.ClassB objB = objA.get();
objA.setB(20, objB);
System.out.println(objB.getA() + " " + objB.getB());
}
}
Локальные классы
n Описываются в теле блока
n Экземпляры имеют доступ к полям и методам внешнего объекта
n Экземпляры имеют доступ к локальным переменным, снабженным модификатором final
public class ClassA {
public Iterator iterator() {
class Iter implements Iterator {
//...
}
//...
return new Iter();
}
Анонимные классы
n Описываются непосредственно в выражении new и служат его частью
n Тип, указанный после new является базовым для объявляемого анонимного класса
n Могут расширять один класс или реализовывать один интерфейс
n Явно писать implements или
extends нельзя
n Не могут иметь конструкторов
Пример анонимного класса
import java.awt.*;
import javax.swing.*;
public class MyApplet extends JApplet {
...
public void init() {
JButton btn = new JButton("?");
getContentPane().add(btn);
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
((JButton)e.getSource()).setText("!");
}
});
}
}
Вопрос 73 Графические приложения: технологии AWT и Swing. 2-7. Лекция Основы создания графических приложений.
Дата: 2019-07-30, просмотров: 212.