Java的事件监听机制

事件监听机制:
A:事件源:事件发生的地方(对象)
B:事件:要发生的事情(接口)
C:事件处理:针对发生的事情做出的处理方案(实现的接口)
D:事件监听:把事件源和事件关联起来(操作)


首先我们先创建一个窗口 

public class text2 {

		public static void main(String[] args) {
			Frame f = new Frame("窗口");
			f.setBounds(400, 300, 400, 300);
			//布局
			f.setLayout(new FlowLayout());
			//窗口可显示
			f.setVisible(true);
		}

}

问题:上面的程序不能关闭,需要加关闭窗口监听。

下面的程序用匿名内部类加监听,实现点击关闭

public class text2 {

		public static void main(String[] args) {
			Frame f = new Frame("数据转移");
			f.setBounds(400, 300, 400, 300);
			//布局
			f.setLayout(new FlowLayout());
			
			//关闭窗口监听
			f.addWindowListener(new WindowListener() {
				
				@Override
				public void windowOpened(WindowEvent e) {
					// TODO Auto-generated method stub
					
				}
				
				@Override
				public void windowIconified(WindowEvent e) {
					// TODO Auto-generated method stub
					
				}
				
				@Override
				public void windowDeiconified(WindowEvent e) {
					// TODO Auto-generated method stub
					
				}
				
				@Override
				public void windowDeactivated(WindowEvent e) {
					// TODO Auto-generated method stub
					
				}
				//我们只用到了这个,其他的都没用到
				@Override
				public void windowClosing(WindowEvent e) {
					// TODO Auto-generated method stub
					System.exit(0);
				}
				
				@Override
				public void windowClosed(WindowEvent e) {
					// TODO Auto-generated method stub
					
				}
				
				@Override
				public void windowActivated(WindowEvent e) {
					// TODO Auto-generated method stub
					
				}
			});
			//窗口可显示
			f.setVisible(true);
		}

}

问题:看完上面的程序,我们可以发现,由于使用接口,就要实现其所有方法,这样使得代码不简洁。

下面用到适配器进行改进:用适配器类实现所有的接口方法(空实现),然后用哪个方法重写那个方法,看程序

public class text2 {

		public static void main(String[] args) {
			Frame f = new Frame("数据转移");
			f.setBounds(400, 300, 400, 300);
			//布局
			f.setLayout(new FlowLayout());
			
			//关闭窗口监听
			f.addWindowListener(new WindowAdapter() {
				@Override
				public void windowClosing(WindowEvent e) {
					// TODO Auto-generated method stub
					System.exit(0);
				}
			});
			//窗口可显示
			f.setVisible(true);
		}

}

监听例子1:按钮点击事件

public class FrameDemo02 {
	public static void main(String[] args) {
		Frame f = new Frame("数据转移");
		f.setBounds(400, 300, 400, 300);
		//布局
		f.setLayout(new FlowLayout());
		
		Button b = new Button("颜色变化");
		
		f.add(b);
		//按钮点击事件
		b.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				f.setBackground(Color.RED);
			}
		});

		//关闭窗口监听
		f.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
			// TODO Auto-generated method stub
			System.exit(0);
			}
		});
		//窗口可显示
		f.setVisible(true);
	}

}

监听例子2:鼠标点击事件

public class FrameDemo02 {
	public static void main(String[] args) {
		Frame f = new Frame("数据转移");
		f.setBounds(400, 300, 400, 300);
		//布局
		f.setLayout(new FlowLayout());
		
		Button b = new Button("颜色变化");
		
		f.add(b);

		//鼠标点击事件
		b.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseEntered(MouseEvent e) {
				// TODO Auto-generated method stub
				f.setBackground(Color.RED);//鼠标进入
			}
		});
		b.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseExited(MouseEvent e) {
				// TODO Auto-generated method stub
				f.setBackground(Color.BLUE);
			}
		});
		//关闭窗口监听
		f.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
			// TODO Auto-generated method stub
			System.exit(0);
			}
		});
		//窗口可显示
		f.setVisible(true);
	}

}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值