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



转载于:https://www.cnblogs.com/ybzmy/p/9688297.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值