|
Spec-Zone .ru
спецификации, руководства, описания, API
|
public class EventHandler extends Object implements InvocationHandler
EventHandler class оказывает поддержку для того, чтобы динамически генерировать слушателей события, методы которых выполняют простой оператор, включающий входящий объект-событие и целевой объект. EventHandler class предназначается, чтобы использоваться интерактивными инструментами, такими как разработчики приложений, которые позволяют разработчикам делать соединения между бобами. Обычно соединения делаются из боба пользовательского интерфейса (источник события) к бобу логики приложения (цель). Самые эффективные соединения этого вида изолируют логику приложения от пользовательского интерфейса. Например, EventHandler для соединения от a JCheckBox к методу, который принимает, булево значение может иметь дело с извлечением состояния флажка и передачи этого непосредственно к методу так, чтобы метод был изолирован от уровня пользовательского интерфейса.
Внутренние классы - другой, более общий способ обработать события от пользовательских интерфейсов. EventHandler class обрабатывает только подмножество того, что является возможными использующими внутренними классами. Однако, EventHandler работы лучше с долгосрочной схемой персистентности чем внутренние классы. Кроме того, использование EventHandler в больших приложениях, в которых тот же самый интерфейс реализуется много раз, может уменьшить диск и объем потребляемой памяти приложения.
Причина это слушатели, создаваемые с EventHandler имейте такое маленькое место, то, что Proxy class ТО, на который EventHandler полагается, реализации долей идентичных интерфейсов. Например, если Вы используете EventHandler create методы, чтобы сделать весь ActionListeners в приложении, все слушатели действия будут экземплярами единственного class (один создаваемый Proxy class). Вообще, слушатели, основанные на Proxy class требует, чтобы один слушатель class был создан на тип слушателя (интерфейс), тогда как внутренний подход class требует, чтобы один class был создан на слушателя (возразите, что реализует интерфейс).
Вы обычно не имеете дело непосредственно с EventHandler экземпляры. Вместо этого Вы используете один из EventHandler
create методы, чтобы создать объект, который реализует данный интерфейс слушателя. Этот объект слушателя использует EventHandler возразите негласно, чтобы инкапсулировать информацию о событии, объект, который будет отправлен сообщение, когда событие имеет место, сообщение (метод), который будет отправлен, и любой параметр методу. Следующий раздел дает примеры того, как создать объекты слушателя, используя create методы.
EventHandler должен установить слушателя, который вызывает метод на целевом объекте без параметров. В следующем примере мы создаем ActionListener это вызывает toFront метод на экземпляре javax.swing.JFrame.
myButton.addActionListener(
(ActionListener)EventHandler.create(ActionListener.class, frame, "toFront"));
Когда myButton нажимается, оператор frame.toFront() будет выполняться. Можно было получить тот же самый эффект, с некоторой дополнительной безопасностью типов времени компиляции, определяя новую реализацию ActionListener взаимодействуйте через интерфейс и добавление экземпляра этого к кнопке:
//Equivalent code using an inner class instead of EventHandler.
myButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
frame.toFront();
}
});
Следующее самое простое использование EventHandler должен извлечь значение свойства из первого параметра метода в интерфейсе слушателя (обычно объект-событие) и использовать это, чтобы установить значение свойства в целевом объекте. В следующем примере мы создаем ActionListener это устанавливает nextFocusableComponent свойство цели (myButton) возражает против значения "исходного" свойства события. Это соответствовало бы следующей внутренней реализации class:EventHandler.create(ActionListener.class, myButton, "nextFocusableComponent", "source")
//Equivalent code using an inner class instead of EventHandler.
new ActionListener() {
public void actionPerformed(ActionEvent e) {
myButton.setNextFocusableComponent((Component)e.getSource());
}
}
Также возможно создать EventHandler это только передает входящий объект-событие к действию цели. Если четвертое EventHandler.create параметром является пустая строка, тогда событие было только проведено: Это соответствовало бы следующей внутренней реализации class:EventHandler.create(ActionListener.class, target, "doActionEvent", "")
//Equivalent code using an inner class instead of EventHandler.
new ActionListener() {
public void actionPerformed(ActionEvent e) {
target.doActionEvent(e);
}
}
Вероятно, наиболее популярный способ использования EventHandler должен извлечь значение свойства из источника объекта-события и установить это значение как значение свойства целевого объекта. В следующем примере мы создаем ActionListener это устанавливает свойство "метки" целевого объекта к значению "текстового" свойства источника (значение "исходного" свойства) события. Это соответствовало бы следующей внутренней реализации class:EventHandler.create(ActionListener.class, myButton, "label", "source.text")
//Equivalent code using an inner class instead of EventHandler.
new ActionListener {
public void actionPerformed(ActionEvent e) {
myButton.setLabel(((JTextField)e.getSource()).getText());
}
}
Свойство события может быть "квалифицировано" с произвольным числом префиксов свойства, разграниченных с "." символом. Имена "квалификации", которые появляются перед "." символами, берутся в качестве имен свойств, которые должны быть применены, крайние левые первый к объекту-событию. Например, следующий слушатель действия
мог бы быть записан как следующий внутренний class (предполагающий, что все свойства имели канонические методы метода get и возвратили соответствующие типы):EventHandler.create(ActionListener.class, target, "a", "b.c.d")
//Equivalent code using an inner class instead of EventHandler.
new ActionListener {
public void actionPerformed(ActionEvent e) {
target.setA(e.getB().getC().isD());
}
}
Целевое свойство может также быть "квалифицировано" с произвольным числом свойства, снабжает префиксом разграниченный "." символ. Например, следующий слушатель действия: EventHandler.create(ActionListener.class, target, "a.b", "c.d")мог бы быть записан как следующий внутренний class (предполагающий, что все свойства имели канонические методы метода get и возвратили соответствующие типы):
//Equivalent code using an inner class instead of EventHandler.
new ActionListener {
public void actionPerformed(ActionEvent e) {
target.getA().setB(e.getC().isD());
}
}
Как EventHandler в конечном счете полагается на отражение, чтобы вызвать метод, который мы рекомендуем против предназначения для перегруженного метода. Например, если цель является экземпляром class MyTarget который определяется как:
public class MyTarget {
public void doIt(String);
public void doIt(Object);
}
Затем метод doIt перегружается. EventHandler вызовет метод, который является соответствующий основанный на источнике. Если источник является нулем, то любой метод является соответствующим и тот, который вызывается, неопределено. По этой причине мы рекомендуем против предназначения для перегруженных методов.Proxy, EventObject| Конструктор и Описание |
|---|
EventHandler(Object target, String action, String eventPropertyName, String listenerMethodName)
Создает новое
EventHandler объект; Вы обычно используете один из create методы вместо того, чтобы вызвать этого конструктора непосредственно. |
| Модификатор и Тип | Метод и Описание |
|---|---|
static <T> T |
create(Class<T> listenerInterface, Object target, String action)
Создает реализацию
listenerInterface в котором все методы в интерфейсе слушателя применяют обработчик action к target. |
static <T> T |
create(Class<T> listenerInterface, Object target, String action, String eventPropertyName)
/ ** Создает реализацию
listenerInterface в котором все методы передают значение выражения события, eventPropertyName, к заключительному методу в операторе, action, которому применяются к target. |
static <T> T |
create(Class<T> listenerInterface, Object target, String action, String eventPropertyName, String listenerMethodName)
Создает реализацию
listenerInterface в котором называют метод listenerMethodName передает значение выражения события, eventPropertyName, к заключительному методу в операторе, action, которому применяются к target. |
Строка |
getAction()
Возвращает имя перезаписываемого свойства цели, которое этот обработчик событий установит, или имя метода, который этот обработчик событий вызовет на цель.
|
Строка |
getEventPropertyName()
Возвращает свойство события, которое должно использоваться в действии, которому применяются к цель.
|
Строка |
getListenerMethodName()
Возвращает имя метода, который инициирует действие.
|
Объект |
getTarget()
Возвращает объект, которому этот обработчик событий отправит сообщение.
|
Объект |
invoke(Object proxy, Method method, Object[] arguments)
Извлеките соответствующее значение свойства из события и передайте это к действию, связанному с этим
EventHandler. |
@ConstructorProperties(value={"target","action","eventPropertyName","listenerMethodName"}) public EventHandler(Object target, String action, String eventPropertyName, String listenerMethodName)
EventHandler объект; Вы обычно используете один из create методы вместо того, чтобы вызвать этого конструктора непосредственно. Обратитесь к the general version of create для полного описания eventPropertyName и listenerMethodName параметр.target - объект, который выполнит действиеaction - имя (возможно квалифицированный) свойство или метод на целиeventPropertyName - (возможно квалифицированный) имя читаемого свойства входящего событияlistenerMethodName - имя метода в интерфейсе слушателя, который должен инициировать действиеNullPointerException - если target нульNullPointerException - если action нульEventHandler, create(Class, Object, String, String, String), getTarget(), getAction(), getEventPropertyName(), getListenerMethodName()public Object getTarget()
EventHandler(Object, String, String, String)public String getAction()
EventHandler(Object, String, String, String)public String getEventPropertyName()
EventHandler(Object, String, String, String)public String getListenerMethodName()
null показывает, что все методы в интерфейсе слушателя инициировали действие.EventHandler(Object, String, String, String)public Object invoke(Object proxy, Method method, Object[] arguments)
EventHandler.invoke в интерфейсе InvocationHandlerproxy - объект проксиmethod - метод в интерфейсе слушателяarguments - массив объектов, содержащих значения параметров, которые передают в вызове метода экземпляру прокси, или null если метод интерфейса не берет параметров. Параметры типов примитивов обертываются в экземпляры соответствующей примитивной обертки class, такой как java.lang.Integer или java.lang.Boolean.EventHandlerpublic static <T> T create(Class<T> listenerInterface, Object target, String action)
listenerInterface в котором все методы в интерфейсе слушателя применяют обработчик action к target. Этот метод реализуется, вызывая другой, более общий, реализация create метод с обоими eventPropertyName и listenerMethodName принимая значение null. Обратитесь к the general version of create для полного описания action параметр. Создать ActionListener это показывает a JDialog с dialog.show(), можно записать:
EventHandler.create(ActionListener.class, dialog, "show")
listenerInterface - интерфейс слушателя, чтобы создать прокси дляtarget - объект, который выполнит действиеaction - имя (возможно квалифицированный) свойство или метод на целиlistenerInterfaceNullPointerException - если listenerInterface нульNullPointerException - если target нульNullPointerException - если action нульcreate(Class, Object, String, String)public static <T> T create(Class<T> listenerInterface, Object target, String action, String eventPropertyName)
listenerInterface в котором все методы передают значение выражения события, eventPropertyName, к заключительному методу в операторе, action, которому применяются к target. Этот метод реализуется, вызывая более общее, реализацию create метод с listenerMethodName принимая значение null. Обратитесь к the general version of create для полного описания action и eventPropertyName параметры. Создать ActionListener это устанавливает текст a JLabel к текстовому значению JTextField источник входящего события, можно использовать следующий код:
Это эквивалентно следующему коду:EventHandler.create(ActionListener.class, label, "text", "source.text");
//Equivalent code using an inner class instead of EventHandler.
new ActionListener() {
public void actionPerformed(ActionEvent event) {
label.setText(((JTextField)(event.getSource())).getText());
}
};
listenerInterface - интерфейс слушателя, чтобы создать прокси дляtarget - объект, который выполнит действиеaction - имя (возможно квалифицированный) свойство или метод на целиeventPropertyName - (возможно квалифицированный) имя читаемого свойства входящего событияlistenerInterfaceNullPointerException - если listenerInterface нульNullPointerException - если target нульNullPointerException - если action нульcreate(Class, Object, String, String, String)public static <T> T create(Class<T> listenerInterface, Object target, String action, String eventPropertyName, String listenerMethodName)
listenerInterface в котором называют метод listenerMethodName передает значение выражения события, eventPropertyName, к заключительному методу в операторе, action, которому применяются к target. Все другие методы слушателя ничего не делают. eventPropertyName строка используется, чтобы извлечь значение из входящего объекта-события, который передают к целевому методу. Общий падеж является целевым методом, не берет параметров, когда значение нуля должно использоваться для eventPropertyName. Альтернативно, если Вы хотите входящий объект-событие, который передают непосредственно к целевому использованию метода пустая строка. Формат eventPropertyName строка является последовательностью методов или свойств, где каждый метод или свойство применяются к значению, возвращенному preceeding методом, запускающимся с входящего объекта-события. Синтаксис: propertyName{.propertyName}* где propertyName соответствует метод или свойство. Например, чтобы извлечь point свойство от a MouseEvent, Вы могли использовать также "point" или "getPoint" как eventPropertyName. Извлечь "текстовое" свойство из a MouseEvent с a JLabel исходное использование любой из следующих как eventPropertyName: "source.text", "getSource.text" "getSource.getText" или "source.getText". Если метод не может быть найден, или исключение сгенерировано как часть вызова метода a RuntimeException будет брошен в, диспетчеризируют время. Например, если входящий объект-событие является нулем, и eventPropertyName ненуль и не пустой, a RuntimeException будет брошен.
action параметр имеет тот же самый формат как eventPropertyName параметр, где последнее имя свойства идентифицирует или имя метода или перезаписываемое свойство.
Если listenerMethodName null
все методы в интерфейсе инициировали action выполняться на target.
Например, чтобы создать a MouseListener это устанавливает целевой объект origin свойство к поступлению MouseEvent's расположение (это - значение mouseEvent.getPoint()) каждый раз, когда кнопка мыши нажимается, можно было бы записать:
Это сопоставимо с записью aEventHandler.create(MouseListener.class, target, "origin", "point", "mousePressed");
MouseListener в котором все методы кроме mousePressed без операций в секунду:
//Equivalent code using an inner class instead of EventHandler.
new MouseAdapter() {
public void mousePressed(MouseEvent e) {
target.setOrigin(e.getPoint());
}
};
listenerInterface - интерфейс слушателя, чтобы создать прокси дляtarget - объект, который выполнит действиеaction - имя (возможно квалифицированный) свойство или метод на целиeventPropertyName - (возможно квалифицированный) имя читаемого свойства входящего событияlistenerMethodName - имя метода в интерфейсе слушателя, который должен инициировать действиеlistenerInterfaceNullPointerException - если listenerInterface нульNullPointerException - если target нульNullPointerException - если action нульEventHandler
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE. Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2013, Oracle и/или его филиалы. Все права защищены.
Проект сборка-b92