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
методы, чтобы сделать весь ActionListener
s в приложении, все слушатели действия будут экземплярами единственного 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
в интерфейсе InvocationHandler
proxy
- объект проксиmethod
- метод в интерфейсе слушателяarguments
- массив объектов, содержащих значения параметров, которые передают в вызове метода экземпляру прокси, или null
если метод интерфейса не берет параметров. Параметры типов примитивов обертываются в экземпляры соответствующей примитивной обертки class, такой как java.lang.Integer
или java.lang.Boolean
.EventHandler
public 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
- имя (возможно квалифицированный) свойство или метод на целиlistenerInterface
NullPointerException
- если 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
- (возможно квалифицированный) имя читаемого свойства входящего событияlistenerInterface
NullPointerException
- если 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
- имя метода в интерфейсе слушателя, который должен инициировать действиеlistenerInterface
NullPointerException
- если listenerInterface
нульNullPointerException
- если target
нульNullPointerException
- если action
нульEventHandler
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE. Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2013, Oracle и/или его филиалы. Все права защищены.
Проект сборка-b92