事件处理的关键在于把握 “监听类”三个字,用监听类的对象去监听具体事件。所以必须要有监听类:
模板一:让包含“事件源”的对象担任监听者。建立实现监听接口的类,再建立该类的对象来监听具体事件,也就是说具体事件(如按键)放到实现监听接口的类中。这种模式就是“某class 类 implement ActionListener”。如这个类系统自带的如JFrame,则往往采用某类继承这个class 类,如“子类 extends JFrame implement ActionListener“。
package nice;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Test4 extends JFrame implements ActionListener {
static Test4 frm=new Test4();
static JButton bt=new JButton("改变字体颜色");
static JTextArea ta=new JTextArea("欢迎学校委托事件模型",5,20);
public static void main(String[] args) {
bt.addActionListener(frm);
frm.setTitle("操作事件");
frm.setLayout(new FlowLayout());
frm.setSize(260,170);
frm.add(bt);
frm.add(ta);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{ta.setForeground(Color.RED);
}
}
模板二:定义内部类来担任监听者。通常将实现接口的类定义在主类里,使之成为它的内部类,因为是内部类,所以可以访问外部类的所有成员。(ActionListener用于接收操作事件的侦听器接口。对处理操作事件感兴趣的类可以实现此接口,而使用该类创建的对象可使用组件的 addActionListener 方法向该组件注册。在发生操作事件时,调用该对象的 actionPerformed 方法。)
public class Test5
{static JFrame frm=new JFrame ("操作事件");
static JButton bt=new JButton("改变字体颜色");
static JTextArea ta=new JTextArea("欢迎学校委托事件模型",5,20);
public static void main(String[] args) {
MyActLister ma=new MyActLister();
bt.addActionListener(ma);
frm.setTitle("操作事件");
frm.setLayout(new FlowLayout());
frm.setSize(260,170);
frm.add(bt);
frm.add(ta);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setVisible(true);
}
static class MyActLister implements ActionListener{
public void actionPerformed(ActionEvent e)
{ta.setForeground(Color.RED);
}
}
}
模板三:用匿名内部类来担当监听者。
public class Test6 {
static JFrame frm=new JFrame ("操作事件");
static JButton bt=new JButton("改变字体颜色");
static JTextArea ta=new JTextArea("欢迎学校委托事件模型",5,20);
public static void main(String[] args)
{bt.addActionListener(new ActionListener()
{public void actionPerformed(ActionEvent e)
{ta.setForeground(Color.RED);}
});
frm.setTitle("操作事件");
frm.setLayout(new FlowLayout());
frm.setSize(260,170);
frm.add(bt);
frm.add(ta);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setVisible(true);
}
}