• java 事件监听机制组成


    事件源(组件)

    事件(Event)

    监听器(Listener)

    事件处理(引发事件后处理方式)

     

    事件监听机制流程图

    务必记牢:

    确定事件源(容器或组件)

    通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。

    该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。

    一般用匿名内部类来表示。

    在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。

    事件触发后会把事件打包成对象传递给该变量。(其中包括事件源对象。通过getSource()或者,getComponent()获取。)

    事件源:就是awt包或者swing包中的那些图形界面组件。
       

    事件:每一个事件源都有自己特有的对应事件和共性事件。

    监听器:将可以触发某一个事件的动作(不只一个动作)都已经封装到了监听器中。

    以上三者,在java中都已经定义好了。直接获取其对象来用就可以了。

    我们要做的事情是,就是对产生的动作进行处理。

    Eg:

    package june610;

    import java.awt.Button;

    import java.awt.FlowLayout;

    import java.awt.Frame;

    import java.awt.TextField;

    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;

    class MyWin extends WindowAdapter{

        public void windowClosing(WindowEvent e){

            System.out.println("hahahha");

            System.exit(0);

        }

    }

    public class FrameDemo {//如果写成内部类的形式那么前面必须加上public static,因为主方法是静态的,不能调用动态类或者方法

        public static void main(String[] args) {

            //设置窗体

            Frame f = new Frame("窗体");

            f.setSize(400, 300);

            f.setLocation(500, 300);//距离左侧,距离上面

            /**可以用这个方法一次性设置

             * setBounds(int x, int y, int width, int height) 移动组件并调整其大小。

             */

            Button b = new Button("按钮");

            Button b2 = new Button("按钮2");

            TextField tf = new TextField(20);

            f.add(b);//把按钮添加到窗体上

            f.add(b2);//把按钮添加到窗体上

            f.add(tf);//在窗体上的的顺序按照添加的顺序

           

            f.setLayout(new FlowLayout());//设置容器的布局管理器

            //f.addWindowListener(new MyWin());

           

            b.addActionListener(new ActionListener(){//通过匿名内部类,方便      添加动作监听器

                public void actionPerformed(ActionEvent e) {

                    System.out.println("按钮把界面关闭了");

                    //System.exit(0);

                }

            });

           

            //鼠标

            b.addMouseListener(new MouseAdapter() {//鼠标动作监听器

                int count = 1;

                public void mouseEntered(MouseEvent e){

                    System.out.println("鼠标进入"+(count++)+"次!");

                }

            });

           

            b.addMouseListener(new MouseAdapter(){//和上面的一样,可以写在一起

                int clickCount = 1;

                public void mouseClicked(MouseEvent e){

                    if(e.getClickCount() == 2){

                    System.out.println("双击动作"+clickCount++);  

                    }

                }

            });

           

            /*

            f.addWindowListener(new WindowAdapter()//匿名内部类的写法

            {

                public void windowClosing(WindowEvent e)

                {

                    System.out.println("我关");

                    System.exit(0);

                }

                public void windowActivated(WindowEvent e)

                {

                    System.out.println("我活了。");

                }

               

                public void windowOpened(WindowEvent e)

                {

                    System.out.println("我被打开了,hahahhahah");

                }

            });*/

           

            //键盘:

            b2.addKeyListener(new KeyAdapter() {

               

                public void keyPressed(KeyEvent e)

                {

                    System.out.println("键盘的作用");//用鼠标按没反应,

                    System.out.println(e.getKeyChar()+"---"+e.getKeyCode());//f---70等、

                    if(e.getKeyCode() == 27){//按住esc键退出

                        System.out.println("ESC键把我关闭了!");

                        System.exit(0);

                    }

                    //组合键去关闭 CTRL + ENTER

                    if(e.isControlDown() && e.getKeyCode() == KeyEvent.VK_ENTER){

                        System.out.println("CTRL + ENTER组合键把我关闭了!");

                        System.exit(0);

                    }

                }

            });

            //文本框

            tf.addKeyListener(new KeyAdapter() {

                public void keyPressed(KeyEvent e){

                    if(!(e.getKeyCode()>=KeyEvent.VK_0 && e.getKeyCode()<=KeyEvent.VK_9)){

                        System.out.println(e.getKeyChar()+"不符合是数字!");

                    }

                }

            });

           

            f.setVisible(true);//设置可见性

        }

    }

     

    Eg://列出文件夹内全部的文件

    package june610;

    import java.awt.Button;

    import java.awt.FlowLayout;

    import java.awt.Frame;

    import java.awt.TextArea;

    import java.awt.TextField;

    import java.awt.event.ActionEvent;

    import java.awt.event.ActionListener;

    import java.awt.event.KeyAdapter;

    import java.awt.event.KeyEvent;

    import java.awt.event.WindowAdapter;

    import java.awt.event.WindowEvent;

    import java.io.File;

    class MyFrame {

        private Frame f;

        private Button b;

        private TextField tf;

        private TextArea ta;

        MyFrame() {

            init();

        }

        void init() {

            f = new Frame("我的电脑");

            f.setBounds(300, 100, 600, 500);

            f.setLayout(new FlowLayout());

            b = new Button("转到");

            tf = new TextField(60);

            ta = new TextArea(25, 70);

            f.add(tf);

            f.add(b);

            f.add(ta);

            f.setVisible(true);

            action();

        }

        //窗体上的操作

        void action() {

            f.addWindowListener(new WindowAdapter() {

                public void windowClosing(WindowEvent e) {

                    System.exit(0);

                }

            });

           

            buttonAction();

            keyAction();

        }

        void keyAction(){

            //设置键盘监听器,当输入enter键的时候实现和点击鼠标同样的功能!

            b.addKeyListener(new KeyAdapter() {

                public void keyPressed(KeyEvent e){

                    //if(e.getKeyCode() == 10){

                        //buttonAction();

                    //}

                   

                    String dirPath = tf.getText();// 获取文本(我们想验证的是路径),接下来获取文件

                    File file = new File(dirPath);// 获取文件

                    if (file.exists() && file.isDirectory()) {// 判断,存在否以及是否是文件夹

                        ta.setText("");// 如果符合条件的话,清空以前的数据;

                        String[] names = file.list();

                        for (String name : names) {

                            ta.append(name + " ");

                        }

                        System.out.println("=======");

                    } else {

                        ta.setText("");

                        ta.append("对不起,请确认您输入的是路径!");

                    }

                   

                    System.out.println(e.getKeyCode());

                }

            });

           

            tf.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {

                    String dirPath = tf.getText();// 获取文本(我们想验证的是路径),接下来获取文件

                    File file = new File(dirPath);// 获取文件

                    if (file.exists() && file.isDirectory()) {// 判断,存在否以及是否是文件夹

                        ta.setText("");// 如果符合条件的话,清空以前的数据;

                        String[] names = file.list();

                        for (String name : names) {

                            ta.append(name + " ");

                        }

                        System.out.println("=======");

                    } else {

                        ta.setText("");

                        ta.append("对不起,请确认您输入的是路径!");

                    }

                }

            });

        }

       

        void buttonAction() {

            b.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {

                    String dirPath = tf.getText();// 获取文本(我们想验证的是路径),接下来获取文件

                    File file = new File(dirPath);// 获取文件

                    if (file.exists() && file.isDirectory()) {// 判断,存在否以及是否是文件夹

                        ta.setText("");// 如果符合条件的话,清空以前的数据;

                        String[] names = file.list();

                        for (String name : names) {

                            ta.append(name + " ");

                        }

                        System.out.println("=======");

                    } else {

                        ta.setText("");

                        ta.append("对不起,请确认您输入的是路径!");

                    }

                }

            });

        }

    }

     

    public class FrameDemo3 {

        public static void main(String[] args) {

            new MyFrame();

        }

    }

  • 相关阅读:
    一段代码让你了解匿名函数的来龙去脉
    橡皮擦背景色橡皮擦魔术橡皮擦
    flv播放器
    测试面试题01
    java中堆和栈的区别
    经典javaThead 生产者 消费者
    判断一个点是否在三个点组成的三角形内 java 代码 面试经典
    软件项目管理面试题
    java中的位运算
    真正的JDBC java代码
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11137616.html
Copyright © 2020-2023  润新知