• GUI-适配器设计模式-事件处理


    GUI(布局管理器)
    * FlowLayout(流式布局管理器)
     * 从左到右的顺序排列。
     * Panel默认的布局管理器。
    * BorderLayout(边界布局管理器)
     * 东,南,西,北,中
     * Frame默认的布局管理器。
    * GridLayout(网格布局管理器)
     * 规则的矩阵
    * CardLayout(卡片布局管理器)
     * 选项卡
    * GridBagLayout(网格包布局管理器)
     * 非规则的矩阵
    ###25.15_GUI(窗体监听)
     Frame f = new Frame("我的窗体");
     //事件源是窗体,把监听器注册到事件源上
     //事件对象传递给监听器
     f.addWindowListener(new WindowAdapter() {
               public void windowClosing(WindowEvent e) {
                          //退出虚拟机,关闭窗口
       System.exit(0);
      }
     });
    适配器设计模式
    * a.什么是适配器
     * 在使用监听器的时候, 需要定义一个类事件监听器接口.
     * 通常接口中有多个方法, 而程序中不一定所有的都用到, 但又必须重写, 这很繁琐.
     * 适配器简化了这些操作, 我们定义监听器时只要继承适配器, 然后重写需要的方法即可.
    * b.适配器原理
     * 适配器就是一个类, 实现了监听器接口, 所有抽象方法都重写了, 但是方法全是空的.
     * 适配器类需要定义成抽象的,因为创建该类对象,调用空方法是没有意义的
     * 目的就是为了简化程序员的操作, 定义监听器时继承适配器, 只重写需要的方法就可以了.
    事件处理
     * 事件: 用户的一个操作
     * 事件源: 被操作的组件
     * 监听器: 一个自定义类的对象, 实现了监听器接口, 包含事件处理方法,把监听器添加在事件源上, 当事件发生的时候虚拟机就会自动调用监听器中的事件处理方法
    import java.awt.Button;
    import java.awt.FlowLayout;
    import java.awt.Frame;
    import java.awt.Toolkit;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.awt.event.WindowListener;
    public class Demo1_Frame {
     /**
      * @param args
      */
     public static void main(String[] args) {
      Frame f = new Frame("我的第一个窗口");
      f.setSize(400, 600);       //设置窗体大小
      f.setLocation(500, 50);       //设置窗体位置
      f.setIconImage(Toolkit.getDefaultToolkit().createImage("qq.png"));
      Button b1 = new Button("按钮一");
      Button b2 = new Button("按钮二");
      f.add(b1);
      f.add(b2);
      f.setLayout(new FlowLayout());     //设置布局管理器
      //f.addWindowListener(new MyWindowAdapter());
      f.addWindowListener(new WindowAdapter() {
       @Override
       public void windowClosing(WindowEvent e) {
        System.exit(0);
       }
      });
      
      b1.addMouseListener(new MouseAdapter() {
       /*@Override
       public void mouseClicked(MouseEvent e) { //单击
        System.exit(0);
       }*/
       @Override
       public void mouseReleased(MouseEvent e) { //释放
        System.exit(0);
       }
      });
      
      b1.addKeyListener(new KeyAdapter() {
       @Override
       public void keyReleased(KeyEvent e) {
        //System.exit(0);
        //System.out.println(e.getKeyCode());
        //if(e.getKeyCode() == 32) {
        if(e.getKeyCode() == KeyEvent.VK_SPACE){
         System.exit(0);
        }
       }
      });
      
      b2.addActionListener(new ActionListener() {  //添加动作监听,应用场景就是暂停视频和播放视频
       
       @Override
       public void actionPerformed(ActionEvent e) {
        System.exit(0);
       }
      });
      f.setVisible(true);        //设置窗体可见
     }
    }
    /*class MyWindowListener implements WindowListener {
     @Override
     public void windowOpened(WindowEvent e) {
     }
     @Override
     public void windowClosing(WindowEvent e) {
      System.exit(0);
     }
     @Override
     public void windowClosed(WindowEvent e) {
      System.out.println("Closed");
     }
     @Override
     public void windowIconified(WindowEvent e) {
     }
     @Override
     public void windowDeiconified(WindowEvent e) {
     }
     @Override
     public void windowActivated(WindowEvent e) {
     }
     @Override
     public void windowDeactivated(WindowEvent e) {
     }
     
    }
    */
    /*class MyWindowAdapter extends WindowAdapter {
     @Override
     public void windowClosing(WindowEvent e) {
      System.exit(0);
     }
    }*/
     
  • 相关阅读:
    使用ATL开发ActiveX控件
    [Silverlight]AutoCompleteBox控件的一个Bug?
    [Silverlight]一个简单的GroupBox控件
    WCF安全之ASP.NET兼容模式
    Mysql 性能优化记录
    【Python+Django+Pytest】数据库异常pymysql.err.InterfaceError: (0, '') 解决方案
    Django在使用logging日志模块时报错无法操作文件 logging error Permission Error [WinError 32]
    isinstance 判断一个对象属于或不属于多种数据类型
    CentOS 系统 查看 cpu核数
    我踩过的python的坑
  • 原文地址:https://www.cnblogs.com/wuxu/p/10727653.html
Copyright © 2020-2023  润新知