妖碧落

导航

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 demon1_frame {
    /*
     * * FlowLayout(流式布局管理器)
    * 从左到右的顺序排列。
    * Panel默认的布局管理器。
    * BorderLayout(边界布局管理器)
        * 东,南,西,北,中
        * Frame默认的布局管理器。
    * GridLayout(网格布局管理器)
        * 规则的矩阵
    * CardLayout(卡片布局管理器)
        * 选项卡
    * GridBagLayout(网格包布局管理器)
        * 非规则的矩阵
     */
    public static void main(String[] args) {
        Frame f = new Frame("我的第一个窗口");     //可以给一个名字
        f.setSize(400,200);      //设置大小
        f.setLocation(300, 100); // 设置位置
        f.setIconImage(Toolkit.getDefaultToolkit().createImage("qq.png"));  //设置图标
        Button b1 = new Button("按钮1");
        Button b2 = new Button("阿按钮2");
        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 mouseReleased(MouseEvent e) {         //鼠标释放        
                System.exit(0);
            }
            /*
            @Override
            public void mouseClicked(MouseEvent e) {    //单击
                System.exit(0); 
            }*/                        
        });
        b1.addKeyListener(new KeyAdapter() {

            @Override
            public void keyPressed(KeyEvent e) {
                //System.out.println(e.getKeyCode());
                /*if (e.getKeyCode() == 32) {
                    System.exit(0);
                }*/
                if (e.getKeyCode() == KeyEvent.VK_SPACE) {
                    System.exit(0);
                }
                // 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);
    }
    
}

 

posted on 2019-08-15 13:55  妖碧落  阅读(250)  评论(0编辑  收藏  举报