事件处理——TankGame3
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 是事件对象