于文本显示的 JLabel 组件。在 JTextField 中的按 Return 键时,生成一个 ActionEvent ,并且标签的文字变为 JTextField 中的内容。
清单 4. 展示 create(Class, Object, String, String)
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.beans.*;
public class TextFieldHandler extends JFrame {
public TextFieldHandler() {
super("Selection");
setDefaultCloseOperation(EXIT_ON_CLOSE);
JTextField text = new JTextField();
JLabel label = new JLabel();
Container contentPane = getContentPane();
contentPane.add(text, BorderLayout.NORTH);
contentPane.add(label, BorderLayout.CENTER);
text.addActionListener(
(ActionListener)EventHandler.create(
ActionListener.class,
label,
"text",
"source.text")
);
}
public static void main(String args[]) {
JFrame frame = new TextFieldHandler();
frame.setSize(200, 150);
frame.show();
}
}
图 2 显示了这个程序的外观。在文本字段中输入文字并按 Return 键。这会使 ActionListener 产生 EventHandler.create(ActionListener.class, label, "text", "source.text") 调用,其中 source.text 表明要得到事件源的 text 属性,直接映射到 label.setText((JTextField(event.getSource())).getText()) 代码。
图 2. 处理文本字段输入
Merlin的魔力: 动态事件******代理(4)
时间:2011-02-02 IBM John Zukowski
使用 create(Class, Object, String, String, String)
最后一种版本的 create() 是将另外两种方法结合在一起使用,对于在其他调用中没有的参数,则传递 null 。其他版本的 create() 要求您对所有******接口方法做同样的事情,这最后一种方法让您可以指定对每一种******方法调用不同的操作。所以,对于一个 MouseListener ,您可以为 mousePressed() 调用一种操作,为 mouseReleased() 调用另一种操作、还可以为 mouseClicked() 调用其他的操作。清单 5 展示了最后一种版本的 create() ,它只有用于鼠标按下/释放事件的两种简单的打印方法:
清单 5. 展示 create(Class, Object, String, String, String)
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.beans.*;
public class MouseHandler extends JFrame {
public MouseHandler() {
super("Press and Release Mouse");
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container contentPane = getContentPane();
contentPane.addMouseListener(
(MouseListener)EventHandler.create(
MouseListener.class,
this,
"pressed",
"point",
"mousePressed")
);
contentPane.addMouseListener(
(MouseListener)EventHandler.create(
MouseListener.class,
this,
"released",
"point",
"mouseReleased")
);
}
public void pressed(Point p) {
System.out.println("Pressed at: " + p);
}
public void released(Point p) {
System.out.println("Released at: " + p);
}
public static void main(String args[]) {
JFrame frame = new MouseHandler();
frame.setSize(400, 40
|