监听器类是特意为创建一个GUI组件而设计的监听器对象.监听器类是不被其他应用程序所共享的.正确的做法是将它作为一个内部类定义在框架类中.

可以使用匿名内部类简化内部类监听器.匿名内部类是没有名字的内部类.
例如
public ControlCircle(){
jbtEnlage.addActionListener(
new EnlargeListener());
}
class EnlargeListener implements ActionListener{
public void actionPerformed(ActionEvent e)
{
canvas.enlarge();
}    
}
可以替换为
public ControlCircle(){
jbtEnlarge.addActionListener(
new AciotnListener(){
public void actionPerformed(AciotnEvent e){
canvas.enlarge();
}
}
);
}
匿名内部类的语法如下:
new SuperClassName/InterfaceName(){
//
//
}
匿名内部类必须总是扩展父类或实现接口,但是不能有显式的extends或implements语句
匿名内部类必须事先父类或者接口中的所有抽象方法
匿名内部类总是使用父类的无参构造方法来创建实例
import  javax.swing.*;
import  java.awt.event.*;
public  class  AnonymousListenerDemo  extends  JFrame{
         public  AnonymousListenerDemo(){
              
              JButton jbtNew =  new  JButton( "New"  );
              JButton jbtOpen =  new  JButton( "Open"  );
              JButton jbtSave =  new  JButton( "Save"  );
              JButton jbtPrint =  new  JButton( "Print"  );
              
              JPanel panel =  new  JPanel();
              panel.add(jbtPrint);
              panel.add(jbtSave);
              panel.add(jbtOpen);
              panel.add(jbtNew);
              
              add(panel);
              
              jbtNew.addActionListener(
                             new  ActionListener(){
                                    public  void  actionPerformed(ActionEvent e){
                                         System.  out .println( "Process new"  );
                                  }
                           }
              );
              
              jbtOpen.addActionListener(
                             new  ActionListener(){
                                    public  void  actionPerformed(ActionEvent e){
                                         System.  out .println( "Process open"  );
                                  }
                           }
              );
              
              jbtPrint.addActionListener(
                             new  ActionListener(){
                                    public  void  actionPerformed(ActionEvent e){
                                         System.  out .println( "Process print"  );
                                  }
                           }
              );
              
              jbtSave.addActionListener(
                             new  ActionListener(){
                                    public  void  actionPerformed(ActionEvent e){
                                         System.  out .println( "Process save"  );
                                  }
                           }
              );
              
       }
       
         public  static  void  main(String[] args)
       {
              JFrame frame =  new  AnonymousListenerDemo();
              frame.setTitle(  "AnonymousListenerDemo" );
              frame.setDefaultCloseOperation(JFrame.  EXIT_ON_CLOSE );
              frame.setLocationRelativeTo(  null );
              frame.pack();
              frame.setVisible(  true );
       }
}
也可以只创建一个监听器,将这个监听器注册给按钮,让后让监听器检测出事件源.对于每种事件写不同的执行方法
可修改为: 
ButtonListener listener = new ButtonListener();
jbtNew.addActionListener(listener);
jbtSave.addActionListener(listener);
jbtOpen.addActionListener(listener);
jbtPrint.addActionListener(listener);
class ButtonListener implements ActionListener{
public void actionPerformed(ActionEvent e){
if(e.getSource() == jbtNew)
{
System.  out  .println( "Process new"  );
}
else if(e.getSource() == jbtSave)
{
System.  out  .println( "Process save"  );
}
else if(e.getSource() == jbtOpen)
{
System.  out  .println( "Process open"  );
}
else if(e.getSource() == jbtPrint)
{
System.  out  .println( "Process print"  );
}
}
}
窗口事件:
windows类或者windows任何子类都可能触发WindowEvent。JFrame是Windows的子类,因此也可以触发WindowEvent
激活窗口,关闭窗口,正在关闭窗口,变成非活动的窗口,最小化窗口,还原窗口或打开窗口。
import  java.awt.event.*;
import  javax.swing.*;
public  class  TestWindowEvent  extends  JFrame{
         public  static  void  main(String[] args){
              TestWindowEvent frame =  new  TestWindowEvent();
              frame.setTitle(  "TestWindowEvent" );
              frame.setSize(220,80);
              frame.setDefaultCloseOperation(JFrame.  EXIT_ON_CLOSE );
              frame.setLocationRelativeTo(  null );
              frame.setVisible(  true );
       }
       
         public  TestWindowEvent(){
              addWindowListener(  new  WindowListener() {
                     
                       public  void  windowDeiconified(WindowEvent event)
                     {
                           System.  out .println( "Window deiconified"  );
                     }
                     
                       public  void  windowIconified(WindowEvent event){
                           System.  out .println( "Window iconified"  );
                     }
                     
                       public  void  windowActivated(WindowEvent evnet){
                           System.  out .println( "Window activated"  );
                     }
                     
                       public  void  windowDeactivated(WindowEvent event){
                           System.  out .println( "Window deactivated"  );
                     }
                     
                       public  void  windowOpened(WindowEvent event){
                           System.  out .println( "Window opened"  );
                     }
                     
                       public  void  windowClosing(WindowEvent event){
                           System.  out .println( "Window closing"  );
                     }
                     
                       public  void  windowClosed(WindowEvent event){
                           System.  out .println( "Window closed"  );
                     }
              }
              );
       }
}
监听器接口适配器:
因为WindowListener接口中的方法是抽象的,所以使用时必须事先所有方法。为了方便,java提供方便适配器的支持类。它提供监听器中所有方法的默认实现。每个XListener的方便监听器适配器命名为XAdapter.
这样如果只对激活窗口事件感兴趣,使用WindowAdapter可以简化前面的例子。
import  java.awt.event.*;
import  javax.swing.*;
public  class  AdapterDemo  extends  JFrame{
         public  static  void  main(String[] args){
              AdapterDemo frame =  new  AdapterDemo();
              frame.setSize(220,80);
              frame.setLocationRelativeTo(  null );
              frame.setDefaultCloseOperation(JFrame.  EXIT_ON_CLOSE );
              frame.setTitle(  "AdapterDemo" );
              frame.setVisible(  true );
       }
       
         public  AdapterDemo(){
              addWindowListener(  new  WindowAdapter(){
                       public  void  windowActivated(WindowEvent event){
                           System.  out .println( "Window activated"  );
                     }
              });
       }
}

java匿名类监听器相关推荐

  1. java匿名类_Java匿名类

    java匿名类 Java anonymous class are like local class or inner class without a name. We can use java ano ...

  2. 解决内存泄漏更加清楚的认识到Java匿名类与外部类的关系

    1.事件起因 在做项目的时候,通过Android Studio的Memory Monitor窗口观察程序内存使用情况,发现当程序退出的时候,有一部分应该释放掉的内存没有释放掉,知道程序中应该有内存泄漏 ...

  3. Java 匿名类(匿名内部类)

    Java 匿名类(匿名内部类) 学习的参考博文:无恨之都 1. 初识 匿名类 标准说法: 内部类包括:成员类.局部类.匿名类(匿名内部类). 匿名类概念: 匿名类可以使你的代码更加简洁 (JDK8之后 ...

  4. 1.18 Java匿名类,匿名内部类

    匿名类是指没有类名的内部类,必须在创建时使用 new 语句来声明类.其语法形式如下: new <类或接口>() {// 类的主体 }; 这种形式的 new 语句声明一个新的匿名类,它对一个 ...

  5. java匿名类的用法

    1.Java允许我们直接使用一个类的子类的类体创建一个子类对象 2.有时候创建子类对象时,除了使用父类的构造方法外还有类体,这个类体被认为是一个子类去掉类声明后的类体,称作匿名类. 3.匿名类是一个子 ...

  6. java 匿名类_浅谈Java的匿名类

    在实际的项目中看到一个很奇怪的现象,Java可以直接new一个接口,然后在new里面粗暴的加入实现代码.就像下面这样.那么问题来了,new出来的对象没有实际的类作为载体,这不是很奇怪吗? 思考以下代码 ...

  7. java 匿名类调用方法_Java匿名内部类使用与示例

    首先说为什么有匿名类(产生的使命) 两个原因 1.简化代码编写 某种情况下,类只需要扩展一个方法,没必要为了一个方法单独去写一个子类,然后然后调用子类,此时需要匿名类 2.在不同的包内的类内调用类的p ...

  8. java匿名类序列化问题

    Pagination已经继承Serializable,并且具有如下两个属性 private int page;private int pageSize; 变量Integer pageNo, Integ ...

  9. Java匿名类的使用方法

    浅析匿名类的使用方法 匿名类是某种已定义的类的继承,该父类必须真实存在.匿名类属于内部类无法构造静态代码块. 构造匿名类对象主要有以下几种方式: new 类名{类体} 这种方式的例子是注册事件监听器 ...

最新文章

  1. 科大讯飞刷新纪录,机器阅读理解如何超越人类平均水平? | 技术头条
  2. spring cloud gateway之服务注册与发现
  3. 《LeetCode力扣练习》第96题 不同的二叉搜索树 Java
  4. 七、【SAP-PM模块】信息系统 报表分析
  5. 交换机接口的access与trunk
  6. 如何使用ArchUnit测试Java项目的体系结构
  7. numpy求逆矩阵_线性代数精华2——逆矩阵的推导过程
  8. 第9章 项目人力资源管理
  9. centos6.5 安装mysql5.6多实例(多配置文件)
  10. 30 位互联网大佬,当年上了什么大学?
  11. 10.1 Python图像处理之边缘算子-Sobel算子、Roberts算子、拉普拉斯算子、Canny算子、Prewitt算子、高斯拉普拉斯算子
  12. mac安装绿联USB转以太网驱动
  13. 大华流媒体服务器连接显示器,如何从海康平台上拉流接入RTSP安防网络摄像头/海康大华硬盘录像机网页无插件直播流媒体服务器EasyNVR?...
  14. 盘点时间管理方面的一些方法及工具
  15. 三大移动终端操作系统比较
  16. 社交媒体与邮件营销结合实现1+12的效果,你会玩吗?
  17. 编译内核遇到:error: ‘ovl_v1_fs_type’ undeclared (first use in this function)错误
  18. 封装chrome镜像
  19. ipad pro 文章
  20. 如何将 elasticsearch 版本从 openshift-logging 4.2.36 降级到 v4.2.29

热门文章

  1. Python 彩蛋 —— 开发人员留下的惊喜
  2. 阿昌手摸手教你如何在服务器部署若依前后端分离版项目
  3. Python动态演示旋转矩阵的作用
  4. Java可变参数的传参
  5. ch4-数据库安全性
  6. Chrome浏览器F12讲解
  7. Experiment 0x1:TCP套接字编程
  8. mPEG-DSPE 178744-28-0 甲氧基-聚乙二醇-磷脂酰乙醇胺线性PEG磷脂
  9. java随机数生成_java实现随机数生成器
  10. php mysql小数点后两位_mysql 和php 保留2位小数