GUI以及事件监听机制

Posted 北方丶有佳人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GUI以及事件监听机制相关的知识,希望对你有一定的参考价值。

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;

public class FrameDemo {

    public static void main(String[] args) {
        
        //1.创建一个窗体,Frame
        Frame f = new Frame("my Frame");
        //2.对窗体进行基本设置
        f.setSize(500, 400);
        f.setLocation(400, 200);
        //设置布局
        f.setLayout(new FlowLayout());
        
        //给窗体添加组件
        Button but = new Button("my button");
        
        //加入一个文本框组件
        TextField tf = new TextField(40);
        
        
        //将组件添加到窗体中
        f.add(but);
        f.add(tf);
        
        
        /*
         * 需求:想要点击按钮有效果,比如打印一句话。
         * 思路:
         * 1.确定事件源,按钮。
         * 2.确定监听器。按钮添加监听器按钮对象最清楚,到按钮对象中查找。
         * 3.定义处理方式
         * 
         * 定义的规范:XXXListener XXX监听器 --对应的XXXEvent事件
         */
        //1.在按钮上添加所需的监听器
        but.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent e) {
//                System.out.println("按钮被触发了-----"+e);
//                System.exit(0);
                
                /*for (int i = 0; i < 4; i++) {
                    for (int j = 0; j < 5; j++) {
                        System.out.print("*");
                    }
                    System.out.println();
                }*/
                
            }
        });
        
        
        /*
         * 需求:想要实现点击窗体的X就可以实现窗体的关闭
         * 思路:
         * 1.事件源:窗体。
         * 2.监听器,通过窗口对象去查找。
         * 3.事件处理
         * 
         * 到底哪些监听接口有适配器类 
         * 只要监听接口中的方法不大于两个,都没有适配器,适配器的出现只为方便创建对象。
         * 但是,一般监听接口都由适配器
         */
        
        
        f.addWindowListener(new WindowAdapter(){

            public void windowClosing(WindowEvent e){
                System.exit(0);;
            }

            @Override
            public void windowOpened(WindowEvent e) {
                
                System.out.println("孔雀开屏 window open");
            }
            
        });
        
        /*
         * 演示鼠标监听
         * 
         * 按钮事件源
         * 鼠标监听器注册到按钮上
         * 
         * 
         * 组件.addXXXListener(new XXXAdapter(){
         * 
         *         public void methodName(XXXEvent e)
         * })
         * 
         */
        
        but.addMouseListener(new MouseAdapter() {
            
            @Override
            public void mouseClicked(MouseEvent e) {
                
                /*
                 * 想要对鼠标双击进行处理,应该找 鼠标事件对象,因为事件对象一产生,内部必然封装事件源以及事件相关的内容
                 * 要查MouseEvent对象
                 */
                
                if(e.getClickCount()==2){
                    System.out.println("mouse double click");
                }
                
            }
            
        });
        
        /*
         * 需求:文本框中只能输入数字。
         * 事件源:文本框
         * 文本框上注册键盘监听
         * 事件处理
         */
        
        tf.addKeyListener(new KeyAdapter() {

            @Override
            public void keyPressed(KeyEvent e) {
                
                //1.如何获取录入的内容,通过键盘事件对象获取
//                char key = e.getKeyChar();
//                int code = e.getKeyCode();
//                System.out.println(code+"****"+e.getKeyText(code));

//                int code = e.getKeyCode();
//                if(!(code>=e.VK_0&&code<=e.VK_9)){
//                    System.out.println("必须是0-9数字");
//                    e.consume();//取消默认处理方式
//                }
                
                if(e.isControlDown()&&e.getKeyCode()==e.VK_ENTER){
                    System.out.println("ctrl+EnterRun");
                }
            }
            
        });
        
        //3.让窗体显示
        f.setVisible(true);
    }

}

 

以上是关于GUI以及事件监听机制的主要内容,如果未能解决你的问题,请参考以下文章

GUI编程-----事件监听

java GUI编程(swing)之七swing事件监听

GUI编程事件监听以及简易加法计算器的实现

画坦克__事件处理机制__2个监听

Spring事件监听机制源码解析

事件分发机制