使一个组件具有事件处理能力大致可以分为如下三步:
1、public class MyClass implements ActionListener {}
2、someComponent.addActionListener(instanceOfMyClass);
3、public void actionPerformed(ActionEvent e) {
...//事件执行代码
}
先是一个简单的例子(还真是简单,但偏偏又来了个Applet,SUN真变态)
import java.applet.Applet;
import java.awt.Button;
import java.awt.Toolkit;
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class Beeper extends Applet implements ActionListener {
Button button;
public void init() {
setLayout(new BorderLayout());
button = new Button("Click Me");
add("Center", button);
button.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
Toolkit.getDefaultToolkit().beep();
}
}
这里的Beeper首先实现了ActionListener,在方法 actionPerformed 中它进行响铃。 所以它能注册成为button的ActionListener。
接下来是一个复杂点的例子了。
import java.applet.Applet;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class MultiListener extends Applet implements ActionListener {
TextArea topTextArea;
TextArea bottomTextArea;
Button button1, button2;
public void init() {
Label l = null;
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
setLayout(gridbag);
c.fill = GridBagConstraints.BOTH;
c.gridwidth = GridBagConstraints.REMAINDER;
l = new Label("What MultiListener hears:");
gridbag.setConstraints(l, c);
add(l);
c.weighty = 1.0;
topTextArea = new TextArea(5, 20);
topTextArea.setEditable(false);
gridbag.setConstraints(topTextArea, c);
add(topTextArea);
c.weightx = 0.0;
c.weighty = 0.0;
l = new Label("What Eavesdropper hears:");
gridbag.setConstraints(l, c);
add(l);
c.weighty = 1.0;
bottomTextArea = new TextArea(5, 20);
bottomTextArea.setEditable(false);
gridbag.setConstraints(bottomTextArea, c);
add(bottomTextArea);
c.weightx = 1.0;
c.weighty = 0.0;
c.gridwidth = 1;
c.insets = new Insets(10, 10, 0, 10);
button1 = new Button("Blah blah blah");
gridbag.setConstraints(button1, c);
add(button1);
c.gridwidth = GridBagConstraints.REMAINDER;
button2 = new Button("You don't say!");
gridbag.setConstraints(button2, c);
add(button2);
button1.addActionListener(this);
button2.addActionListener(this);
button2.addActionListener(new Eavesdropper(bottomTextArea));
}
public void actionPerformed(ActionEvent e) {
topTextArea.append(e.getActionCommand() + "/n");
}
}
class Eavesdropper implements ActionListener {
TextArea myTextArea;
public Eavesdropper(TextArea ta) {
myTextArea = ta;
}
public void actionPerformed(ActionEvent e) {
myTextArea.append(e.getActionCommand() + "/n");
}
}
在这里先是使用了一个复杂的布局管理器,真BT,把简单问题复杂化。然后给 button1 和 button2 分别加上了实现 ActionListener 的自身。并且动过 e.getActionCommand() 来获取命令文本,这里当然就是按钮上的文本了。并把该文本赋给了位于顶层的 TextArea ,然后又给 button2 注册了一个实现 ActionListener 接口的 Eavesdropper,并给他的构造函数传递了一个保存了下边的 TextArea 对象,并使用该对象来获取事件源的文本。总体来说这个例子还是可以的,就是开始复杂了些。
最后是一个鼠标事件的例子,比较简单,不罗嗦。^_^
import java.awt.*;
public class BlankArea extends Canvas {
Dimension minSize = new Dimension(100, 100);
public BlankArea(Color color) {
setBackground(color);
}
public Dimension getMinimumSize() {
return minSize;
}
public Dimension getPreferredSize() {
return minSize;
}
public void paint(Graphics g) {
Dimension size = getSize();
g.drawRect(0, 0, size.width - 1, size.height - 1);
}
}
import java.applet.Applet;
import java.awt.*;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
public class MouseEventDemo extends Applet implements MouseListener {
BlankArea blankArea;
TextArea textArea;
static final int maxInt = java.lang.Integer.MAX_VALUE;
String newline;
public void init() {
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
setLayout(gridbag);
c.fill = GridBagConstraints.BOTH;
c.gridwidth = GridBagConstraints.REMAINDER;
c.weightx = 1.0;
c.weighty = 1.0;
c.insets = new Insets(1, 1, 1, 1);
blankArea = new BlankArea(new Color(0.98f, 0.97f, 0.85f));
gridbag.setConstraints(blankArea, c);
add(blankArea);
c.insets = new Insets(0, 0, 0, 0);
textArea = new TextArea(5, 20);
textArea.setEditable(false);
gridbag.setConstraints(textArea, c);
add(textArea);
//Register for mouse events on blankArea and applet (panel).
blankArea.addMouseListener(this);
addMouseListener(this);
newline = System.getProperty("line.separator");
}
public void mousePressed(MouseEvent e) {
saySomething("Mouse pressed; # of clicks: " + e.getClickCount(), e);
}
public void mouseReleased(MouseEvent e) {
saySomething("Mouse released; # of clicks: " + e.getClickCount(), e);
}
public void mouseEntered(MouseEvent e) {
saySomething("Mouse entered", e);
}
public void mouseExited(MouseEvent e) {
saySomething("Mouse exited", e);
}
public void mouseClicked(MouseEvent e) {
saySomething("Mouse clicked (# of clicks: " + e.getClickCount() + ")", e);
}
void saySomething(String eventDescription, MouseEvent e) {
textArea.append(
eventDescription
+ " detected on "
+ e.getComponent().getClass().getName()
+ newline);
textArea.setCaretPosition(maxInt); //hack to scroll to bottom
}
}