效果图如下:

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

如图,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("猫猫也知道你按了红色按钮!");
}
}
}
本文深入讲解Java中的监听机制,包括事件源、事件和事件监听者的概念。通过实例演示如何使用监听机制实现按钮颜色切换功能,并引入猫猫类增强理解。
3964

被折叠的 条评论
为什么被折叠?



