【JAVA语言程序设计基础篇】--事件驱动程序设计--了解监听器、注册以及处理事件

第一次对监听器的使用


监听器:是一个监听器接口的实例,并且必须注册到源对象上


监听器实现监听器接口

监听器实际上是一个类 这个类实现了监听器接口

创建监听器注册到源对象上面

注册方法:调用source.addActionListener()来注册


事件是事件源向事件监听器传输事件源状态信息的载体









/**
 * 一个类实现监听的步骤:
 * 1.实现相应的接口
 * 2.把接口的处理方法根据需要重新编写
 * 3.把时间源注册监听
 * 4.事件传到事件对象
 */


第一步(70行):创建EnlargeListener 类 实现 ActionListener接口
第二步(28行):new一个监听器 ,再注册到button1上 
第三步(54行):创建enlarge方法 以被调用
第四步(74行):覆盖接口中的actionPerformed方法  一旦监听到该操作 执行下一句 调用enlarge方法
第五步(71行):为了让actionPerformed能访问enlarge方法 ,将该类定义成inner class


[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. package chapter16;  
  2.   
  3. import java.awt.BorderLayout;  
  4. import java.awt.Graphics;  
  5. import java.awt.event.ActionEvent;  
  6. import java.awt.event.ActionListener;  
  7.   
  8. import javax.swing.JButton;  
  9. import javax.swing.JFrame;  
  10. import javax.swing.JPanel;  
  11.   
  12. @SuppressWarnings("serial")  
  13. public class ControlCircle1 extends JFrame {  
  14.     private circle1 circle = new circle1(20);//必须放在方法外,以便EnlargeListener类能够访问到 变量circle  
  15.     private JButton button1 = new JButton("Enlarge");  
  16.     private JButton button2 = new JButton("Shrink");  
  17.   
  18.     public ControlCircle1() {  
  19.   
  20.         JPanel p1 = new JPanel();  
  21.         p1.add(button1);  
  22.         p1.add(button2);  
  23.   
  24.         add(circle, BorderLayout.CENTER);  
  25.         add(p1, BorderLayout.SOUTH);  
  26.   
  27.           
  28.         button1.addActionListener(new EnlargeListener());//第二步:new一个监听器 ,再注册到button1上   
  29.         button2.addActionListener(new ShrinkListener());  
  30.     }  
  31.   
  32.     public static void main(String[] args) {  
  33.         ControlCircle1 a = new ControlCircle1();  
  34.   
  35.         a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  36.         a.setLocationRelativeTo(null);  
  37.         a.setVisible(true);  
  38.         a.setTitle("displayshow");  
  39.         a.setSize(300300);  
  40.     }  
  41.   
  42.   
  43.     class circle1 extends JPanel {  
  44.         private int radius = 5;  
  45.   
  46.         public circle1() {  
  47.   
  48.         }  
  49.   
  50.         public circle1(int radius) {  
  51.             this.radius = radius;  
  52.         }  
  53.   
  54.         public void enlarge() {//第三步:创建enlarge方法 以被调用  
  55.             radius +=20;  
  56.             repaint();  
  57.         }  
  58.         public void shrink(){  
  59.             radius-=5;  
  60.             repaint();  
  61.         }  
  62.           
  63.         protected void paintComponent(Graphics g) {  
  64.             super.paintComponent(g);  
  65.             g.drawOval(getWidth() / 2 - radius, getHeight() / 2 - radius,  
  66.                     2 * radius, 2 * radius);  
  67.         }  
  68.     }  
  69.   
  70.     class EnlargeListener implements ActionListener {//第一步:创建EnlargeListener 类 实现 ActionListener接口  
  71.                                                         //第五步:为了让actionPerformed能访问enlarge方法 ,将该类定义成inner class  
  72.           
  73.         @Override  
  74.         public void actionPerformed(ActionEvent e) {//第四步:覆盖接口中的actionPerformed方法  一旦监听到该操作 执行下一句 调用enlarge方法  
  75.             circle.enlarge();//处理事件  
  76.         }  
  77.     }  
  78.     class ShrinkListener implements ActionListener{  
  79.   
  80.         @Override  
  81.         public void actionPerformed(ActionEvent e) {  
  82.             circle.shrink();  
  83.         }  
  84.   
  85.           
  86.     }  
  87. }  


enlarge 和 shrink键是控制圆圈的放大和缩小

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值