public class EventHandler extends Object implements InvocationHandler
EventHandler类提供动态生成的事件监听器的方法执行一个简单的声明涉及传入的事件对象和目标对象的支持。
的EventHandler班的目的是通过交互式工具的使用,如应用程序生成器,允许开发人员之间进行连接的豆子。通常连接是由一个用户界面的豆(事件源)到一个应用程序逻辑豆(目标)。这种最有效的连接将应用程序逻辑从用户界面分离出来。例如,一个连接从JCheckBox一方法接受一个布尔值EventHandler可以处理复选框的状态,通过直接提取的方法,该方法从用户界面层分离。
内部类是另一种更普遍的方式来处理用户界面上的事件。的EventHandler类只处理什么是可能使用内部类的一个子集。然而,EventHandler工作更好地与长期持久方案比内部类。同时,利用EventHandler在大型应用中,相同的接口实现多次可以减少磁盘和内存的应用程序的足迹。
创建与EventHandler听众有这样一个小面积的原因是Proxy类,该EventHandler依赖,股价实现相同的接口。例如,如果你使用EventHandler create方法中使所有的ActionListeners,所有行动的听众将一个类的实例(一个由Proxy类创建)。一般来说,基于Proxy类听众需要一个监听器类被创建监听器类(接口),而内部类的方法需要一个类来创建监听器(对象实现的接口)。
你一般不直接与EventHandler实例处理。相反,你使用的EventHandler create方法创建实现了Listener接口对象。这个监听器对象使用一个幕后的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是从监听器接口的方法的第一个参数提取属性值(通常是一个事件对象)用它来套在目标对象的属性值。在下面的例子中我们创建一套目标
nextFocusableComponent财产
ActionListener(色)对象的价值的“源”的事件属性。
这将符合下列内部类的实现: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参数为空字符串,然后事件只是走过:
这将符合下列内部类的实现: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设置“标签”的目标对象属性值的“文本”的源属性(价值的“源”属性)的事件。
这将符合下列内部类的实现: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());
}
}
事件属性可能是“合格”的性质与“前缀分隔的任意数量的字符。”。“限定”出现在“之前”的名称。字符被作为应该应用的属性的名称,留下最多的第一个,到事件对象。
例如,下面的动作侦听器
可以写成如下的内部类(假设所有的性能都有典型的getter方法并返回适当的类型):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。创造(ActionListener.class,目标,“内压”、“C.”)可以写成如下的内部类(假设所有的性能都有典型的getter方法并返回适当的类型):
/ /等效代码使用一个内部类代替EventHandler。新功能{public void actionPerformed(ActionEvent e){目标。geta()。SETB(E. getc()。isd());}}
作为EventHandler最终依靠反射来调用一个方法,我们建议针对重载方法。例如,如果目标是班级MyTarget作为实例:
公共课mytarget {公共无效做(字符串);公共无效做(对象);}然后
doIt过载的方法。EventHandler将调用的方法是基于源的适当。如果源是空的,那么任何一种方法都是合适的,而调用的方法是不确定的。为了这个原因,我们建议针对过载的方法。
Proxy,
EventObject
| Constructor and Description |
|---|
EventHandler(Object target, String action, String eventPropertyName, String listenerMethodName)
创建一个新的
EventHandler对象;你通常使用一个调用此构造函数,而不是直接的
create方法。
|
| Modifier and Type | Method and Description |
|---|---|
static <T> T |
create(类<T> listenerInterface, Object target, String action)
创建
listenerInterface其中所有的监听器接口的应用程序的
action的
target实现。
|
static <T> T |
create(类<T> listenerInterface, Object target, String action, String eventPropertyName)
/ * *创建
listenerInterface其中所有的方法通过事件表达的价值
eventPropertyName实现,到最终的方法在声明中,
action,适用于
target。
|
static <T> T |
create(类<T> listenerInterface, Object target, String action, String eventPropertyName, String listenerMethodName)
创建的方法称为
listenerMethodName通过事件表达的价值
eventPropertyName
listenerInterface实现,到最终的方法在声明中,
action,适用于
target。
|
String |
getAction()
返回此事件处理程序将设定目标的可写属性的名称,或是此事件处理程序将调用目标方法的名称。
|
String |
getEventPropertyName()
返回用于应用于目标的操作的事件的属性。
|
String |
getListenerMethodName()
返回将触发该动作的方法的名称。
|
Object |
getTarget()
返回此事件处理程序将发送消息的对象。
|
Object |
invoke(Object proxy, 方法 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, Object[] arguments)
EventHandler有关的行动。
invoke 接口
InvocationHandler
proxy -代理对象
method -监听器接口的方法
arguments -包含在方法上通过代理实例调用的实参的值对象的数组,或
null如果接口方法不需要参数。原始类型的实参是包裹在适当的原始包装类的实例,如
java.lang.Integer或
java.lang.Boolean。
EventHandler
public static <T> T create(类<T> listenerInterface, Object target, String action)
listenerInterface其中所有的监听器接口的应用程序的
action的
target实现。这种方法是通过调用,实现更一般的,都
eventPropertyName和
listenerMethodName以价值
null的
create方法实现。指
the general version of create
action参数的完整描述。
创建一个ActionListener显示一个JDialog与dialog.show(),可以写:
EventHandler.create(ActionListener.class, dialog, "show")
T型创造
listenerInterface -监听器接口创建代理
target -将执行动作的对象
action -一个名字(可能合格)对目标属性或方法
listenerInterface对象
NullPointerException -如果
listenerInterface是空的
NullPointerException -如果
target是空的
NullPointerException -如果
action是空的
create(Class, Object, String, String)
public static <T> T create(类<T> listenerInterface, Object target, String action, String eventPropertyName)
listenerInterface其中所有的方法通过事件表达的价值
eventPropertyName实现,到最终的方法在声明中,
action,适用于
target。这种方法是通过调用更一般的执行,与
listenerMethodName以价值
null的
create方法的实现。参考
the general version of create为一个完整的描述的
action和
eventPropertyName参数。
创建设置文本的JLabel对输入事件的JTextField源文本的价值ActionListener,你可以使用下面的代码:
这等价于下面的代码: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());
}
};
T型创造
listenerInterface -监听器接口创建代理
target -将执行动作的对象
action -一个名字(可能合格)对目标属性或方法
eventPropertyName -(可能合格)的传入事件可读属性名称
listenerInterface对象
NullPointerException -如果
listenerInterface是空的
NullPointerException -如果
target是空的
NullPointerException -如果
action是空的
create(Class, Object, String, String, String)
public static <T> T create(类<T> listenerInterface, Object target, String action, String eventPropertyName, String listenerMethodName)
listenerMethodName通过事件表达的价值
eventPropertyName
listenerInterface实现,到最终的方法在声明中,
action,适用于
target。所有其他的监听方法什么都不做。
的eventPropertyName字符串是用来从被传递到目标方法传入的事件对象中提取一个值。常见的情况是,目标方法不需要参数,在这种情况下,空值应该用于eventPropertyName。如果您希望将传入的事件对象直接传递给目标方法,也可以使用空字符串。该eventPropertyName字符串的格式是一个序列的方法或属性,每个属性或方法应用于价值由前面的方法从传入的事件对象返回。语法:propertyName{.propertyName}*哪里propertyName匹配方法或属性。例如,从一个MouseEvent提取point属性,你可以使用"point"或"getPoint"为eventPropertyName。从一个JLabel源MouseEvent使用以下任何eventPropertyName提取物作为“文本”属性:"source.text","getSource.text" "getSource.getText"或"source.getText"。如果一个方法可以不被发现,或生成异常的调用方法RuntimeException将会给调度时间的一部分。例如,如果传入的事件对象为空,和eventPropertyName非空不空,一RuntimeException将抛出。
的action参数是相同的格式和eventPropertyName参数,最后的属性名称标识一个方法名称或可写的属性。
如果listenerMethodName是null所有方法的接口触发action在target执行。
例如,创建一个MouseListener设置目标对象的origin属性来MouseEvent的位置(这是mouseEvent.getPoint()值)每次按下鼠标按钮,一个会写:
这可比写一EventHandler.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());
}
};
T型创造
listenerInterface -监听器接口创建代理
target -将执行动作的对象
action -一个名字(可能合格)对目标属性或方法
eventPropertyName -(可能合格)的传入事件可读属性名称
listenerMethodName在监听器接口应该触发动作名称的方法
listenerInterface对象
NullPointerException -如果
listenerInterface是空的
NullPointerException -如果
target是空的
NullPointerException -如果
action是空的
EventHandler
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.