java--GUI--事件处理机制

事件处理机制

事件源:产生事件的组件,例如:按钮、窗口等。

事件对象:用户的操作。

监听器:监听事件源上发生的事件,对各种事件作出相应处理。

窗体事件

对窗体事件进行处理时,首先需要定义一个实现了WindowListener接口的类作为窗体监听器,然后通过addWindowListener()方法把窗体对象和窗体监听器绑定。

例:

package com.company.www;
import javax.swing.*;
import java.awt.event.*;
public class Frame {
    public static void GUI(){
        JFrame frame=new JFrame("窗体事件");
        frame.setSize(500,400);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.addWindowListener(new WindowListener() {
            @Override
            public void windowOpened(WindowEvent e) {
                System.out.println("窗体打开事件");
            }

            @Override
            public void windowClosing(WindowEvent e) {
                System.out.println("窗体正在关闭事件");
            }

            @Override
            public void windowClosed(WindowEvent e) {
                System.out.println("窗体关闭事件");
            }

            @Override
            public void windowIconified(WindowEvent e) {
                System.out.println("窗体图标化事件");
            }

            @Override
            public void windowDeiconified(WindowEvent e) {
                System.out.println("窗体取消图标化事件");
            }

            @Override
            public void windowActivated(WindowEvent e) {
                System.out.println("窗体激活事件");
            }

            @Override
            public void windowDeactivated(WindowEvent e) {
                System.out.println("窗体停用事件");
            }
        });
    }
    public static void main(String[] args){
        SwingUtilities.invokeLater(Frame::GUI);
    }
}

输出结果为:
窗体激活事件
窗体打开事件
窗体图标化事件
窗体停用事件
窗体取消图标化事件
窗体激活事件
窗体正在关闭事件

鼠标事件

处理鼠标事件时,先实现MouseListener接口定义监听器(也可以通过继承适配器MouseAdapter类定义监听器),然后调用addMouseListener()方法将监听器绑定到事件源对象。

package com.company.www;
import javax.swing.*;
import java.awt.event.*;
public class Frame {
    public static void GUI(){
        JFrame frame=new JFrame("鼠标事件");
        frame.setSize(500,400);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JButton btn=new JButton("按钮");
        btn.setSize(300,200);
        frame.add(btn);
        btn.addMouseListener(new MouseListener() {
            @Override
            public void mouseClicked(MouseEvent e) {
                System.out.println("鼠标完成单击事件");
            }

            @Override
            public void mousePressed(MouseEvent e) {
                System.out.println("鼠标按下事件");
            }

            @Override
            public void mouseReleased(MouseEvent e) {
                System.out.println("鼠标放开事件");
            }

            @Override
            public void mouseEntered(MouseEvent e) {
                System.out.println("鼠标进入按钮区域事件");
            }

            @Override
            public void mouseExited(MouseEvent e) {
                System.out.println("鼠标移出按钮区域事件");
            }
        });
    }
    public static void main(String[] args){
        SwingUtilities.invokeLater(Frame::GUI);
    }
}

输出结果为:

鼠标进入按钮区域事件
鼠标移出按钮区域事件
鼠标进入按钮区域事件
鼠标按下事件
鼠标放开事件
鼠标完成单击事件
鼠标移出按钮区域事件

键盘事件

处理键盘事件的监听器对象需要实现KeyListener接口或者继承KeyAdapter类,然后调用addKeyListener()方法将监听器绑定到事件源对象。

package com.company.www;
import javax.swing.*;
import java.awt.event.*;
public class Frame {
    public static void GUI(){
        JFrame frame=new JFrame("键盘事件");
        frame.setSize(500,400);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JTextArea ta=new JTextArea(2,2);
        frame.add(ta);
        ta.setVisible(true);
        ta.addKeyListener(new KeyListener() {
            @Override
            public void keyTyped(KeyEvent e) {

            }

            @Override
            public void keyPressed(KeyEvent e) {
                char s=e.getKeyChar();
                int n=e.getKeyCode();
                System.out.println("键盘按下的字符内容为:"+s);
                System.out.println("键盘按下的字符代码为:"+n);
            }

            @Override
            public void keyReleased(KeyEvent e) {

            }
        });
    }
    public static void main(String[] args){
        SwingUtilities.invokeLater(Frame::GUI);
    }
}

输出结果为:

键盘按下的字符内容为:h
键盘按下的字符代码为:72
键盘按下的字符内容为:a
键盘按下的字符代码为:65
键盘按下的字符内容为:p
键盘按下的字符代码为:80
键盘按下的字符内容为:p
键盘按下的字符代码为:80
键盘按下的字符内容为:y
键盘按下的字符代码为:89

动作事件

动作事件不代表某类事件,只是表示一个动作发生了。例如,在关闭一个文件时,可以通过键盘关闭,也可以通过鼠标关闭。不需要关心使用哪种方式关闭文件,只要是对关闭按钮进行操作,就会触发动作事件。

处理动作事件的监听器对象需要实现ActionListener接口。监听器对象在监听动作时,不会像鼠标事件一样处理鼠标的移动和单击的细节,而是去处理像键盘按下这类 有意义 的事件。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

两年半的JAVA练习生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值