public class ActionDemo extends JFrame implements ActionListener{
//定义一个panel
JPanel mp;
JButton jb1=null;
JButton jb2=null;
public static void main(String[] args) {
ActionDemo ad=new ActionDemo();
}
public ActionDemo() {
mp=new JPanel();
jb1=new JButton("黑色");
jb2=new JButton("红色");
Cat c=new Cat();
//注册监听
jb1.addActionListener(this); //括号里要填的是监听者,也可以是别的类的实例
jb2.addActionListener(this); //this 代表的是类ActionDemo的一个对象 ad
jb1.addActionListener(c); //现在,jb1和jb2同时还被Cat类的实例监听着
jb2.addActionListener(c);
jb1.setActionCommand("黑色");
jb2.setActionCommand("红色");
// mp.setBackground(Color.BLACK);
this.add(mp);
this.add(jb1,BorderLayout.NORTH);
this.add(jb2, BorderLayout.SOUTH);
this.setSize(500,300);
this.setVisible(true);
}
@Override
//对事件处理的方法
public void actionPerformed(ActionEvent e) {
//方式一:用getSource()方法获取最初发生 Event 的对象。
// Object obj=e.getSource();
// if(obj == jb1)
// mp.setBackground(Color.black);
// else
// mp.setBackground(Color.RED);
//方式二:利用 setActionCommand("")和getActionCommand(")方法
/*e.getSource()方法依赖于事件对象。
比如:JButton jbt = new JButton("button");中事件对象就是jbt
e.getActionCommand()方法依赖于按钮上的字符串
比如:JButton jbt = new JButton("button");中字符串button
简而言之:用e.getSource()得到的是jbt,而用e.getActionCommand()得到的是button。
*/
if(e.getActionCommand().equals("黑色")) {
mp.setBackground(Color.black);
System.out.println(e.getActionCommand());
}
else {
mp.setBackground(Color.RED);
System.out.println(e.getActionCommand());
}
}
}
class Cat implements ActionListener{
public Cat() {
super();
}
public void actionPerformed(ActionEvent e2) {
if(e2.getActionCommand().equals("黑色")) {
System.out.println("oooo,我是Cat类里面的监听者哦!!");
}
}
}
注意:监听者是对象, this和c.不是类
jb2.addActionListener(c);//从这行代码可以看出,jb2是事件源,而c 代表的是实施监听的对象
actionPerformed(ActionEvent e) //actionPerformed 是事件处理方法,而ActionEvent e 是事件对象