便于理解java监听机制的简单案例

本文深入讲解Java中的监听机制,包括事件源、事件和事件监听者的概念。通过实例演示如何使用监听机制实现按钮颜色切换功能,并引入猫猫类增强理解。

 效果图如下:

 

 鼠标点击黑色,中间变成黑色,点击红色,中间变成红色。

 如图,java监听机制至少需要这三点:事件源、事件、事件监听者。

1.事件源:引起事件发生的对象。

2.事件(对象):比如你点击黑色按钮就是一个事件,在java中事件是被当做一个事件对象对待的。

3.事件监听者:当你点击鼠标时,计算机怎么知道你是否点击了呢?这时候事件监听者就出场了,他就是监视你是否点击了鼠标的监听者。事件监听者是类的对象,可以是发生这个事件的本身类的对象,也可以是其他类的对象。

他们之间的关系可以抽象为

具体操作时,就像我下面的代码一样,当你定义完黑红按钮组件后,这两个组件是引起事件发生的组件,他们是事件源。那么我们就要找人(事件监听者)监听他们,也就是注册监听。这里要注意:

jb1.addActionListener(this);
jb2.addActionListener(this);

这里面的this指的是对象,而不是类名,如果要用其他类的话,先定义该类的对象,再让他作为监听者。就像下面的用cat而不是Cat作为监听者。

注册监听完了之后我们要指定action命令,这个是干啥的呢?我来解释一下。当你为黑红按钮组件添加监听者之后,监听者并不能直接知道你是否点击了鼠标,他要根据action命令的返回值判断是否点击了鼠标,也就是说action命令是个中介,如果你点击了jb1(黑色按钮)的话,他会返回“黑”这个字符串,当然返回值你可以自己随便写。而事件监听者通过e.getActionCommand().equals("黑")   来判断用户点击了黑色按钮。

 下面的案例还有个小功能,就是猫猫类,他可以让你更加清楚监听机制。我的猫猫在jb1上加了注册监听,而没有在jb2上加,点击的时候,运行结果如下:

说明注册监听,action命令缺一不可。

至此,监听机制讲的差不多了 

完整代码如下:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Test extends JFrame implements ActionListener {
        //定义JPanel
        JPanel jp = null;
        JButton jb1 = null;
        JButton jb2 = null;

        public static void main(String[] args){
            Test test = new Test();
        }

        //析构函数
        public Test(){
            jp = new JPanel();
            jb1 = new JButton("黑色");
            jb2 = new JButton("红色");
            //注册监听
            jb1.addActionListener(this);
            jb2.addActionListener(this);
            Cat cat = new Cat();
            jb1.addActionListener(cat);
            //指定action命令
            jb1.setActionCommand("黑");
            jb2.setActionCommand("红");

            this.add(jb1,BorderLayout.NORTH);
            jp.setBackground(Color.blue);
            this.add(jp);
            this.add(jb2,BorderLayout.SOUTH);

            this.setSize(300,250);
            this.setDefaultCloseOperation(EXIT_ON_CLOSE);
            this.setVisible(true);
        }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getActionCommand().equals("黑")){
            System.out.println("你按了黑色按钮!");
            jp.setBackground(Color.black);
        }else if(e.getActionCommand().equals("红")){
            System.out.println("你按了红色按钮!");
            jp.setBackground(Color.red);
        }
    }
}

class Cat implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getActionCommand().equals("黑")){
            System.out.println("猫猫也知道你按了黑色按钮!");
        }else if(e.getActionCommand().equals("红")){
            System.out.println("猫猫也知道你按了红色按钮!");
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小小的香辛料

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

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

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

打赏作者

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

抵扣说明:

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

余额充值