Java監(jiān)聽器ActionListener與MouseListener的執(zhí)行順序說明
基本概念
監(jiān)聽器(Listener):監(jiān)聽器用于監(jiān)聽web應(yīng)用中某些對(duì)象、信息的創(chuàng)建、銷毀、增加,修改,刪除等動(dòng)作的發(fā)生,然后作出相應(yīng)的響應(yīng)處理。當(dāng)范圍對(duì)象的狀態(tài)發(fā)生變化的時(shí)候,服務(wù)器自動(dòng)調(diào)用監(jiān)聽器對(duì)象中的方法。常用于統(tǒng)計(jì)在線人數(shù)和在線用戶,系統(tǒng)加載時(shí)進(jìn)行信息初始化,統(tǒng)計(jì)網(wǎng)站的訪問量等等。ActionListener:ActionListener用于接收操作事件的偵聽器接口。對(duì)處理操作事件感興趣的類可以實(shí)現(xiàn)此接口,而使用該類創(chuàng)建的對(duì)象可使用組件的 addActionListener 方法向該組件注冊(cè)。在發(fā)生操作事件時(shí),調(diào)用該對(duì)象的 actionPerformed 方法。MouseListener:處理鼠標(biāo)事件的類要么實(shí)現(xiàn)此接口(及其包含的所有方法),要么擴(kuò)展抽象類 MouseAdapter(僅重寫所需的方法)。 然后使用組件的 addMouseListener 方法將從該類所創(chuàng)建的偵聽器對(duì)象向該組件注冊(cè)。當(dāng)按下、釋放或單擊(按下并釋放)鼠標(biāo)時(shí)會(huì)生成鼠標(biāo)事件。鼠標(biāo)光標(biāo)進(jìn)入或離開組件時(shí)也會(huì)生成鼠標(biāo)事件。發(fā)生鼠標(biāo)事件時(shí),將調(diào)用該偵聽器對(duì)象中的相應(yīng)方法,并將 MouseEvent 傳遞給該方法。MouseAdapter:用于接收鼠標(biāo)事件的抽象適配器類。 這個(gè)類中的方法是空的。 此類作為創(chuàng)建偵聽器對(duì)象的方便而存在。
開發(fā)環(huán)境
- JAVA 1.8
- Eclipse 201803
源代碼
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GUIDEMO {
public static void main(String[] args) {
// TODO 自動(dòng)生成的方法存根
EventQueue.invokeLater(() ->
{
JFrame frame = new MyFrame();
frame.setTitle("DrawTest");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
});
System.out.println("Hello World");
}
public void print(Object obj) {
System.out.println(obj);
}
}
class MyFrame extends JFrame {
private static final int DEFAULT_WIDTH = 400;
private static final int DEFAULT_HEIGHT = 400;
public MyFrame() {
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
setLocation(100,200);
setLayout(new FlowLayout());
JButton but=new JButton("DEMOButton");
but.addActionListener(event-> {
print("action");
});
but.addMouseListener(new MouseAdapter(){
public void mouseEntered(MouseEvent e) {
print("enter");
}
public void mouseExited(MouseEvent e) {
print("exit");
}
public void mouseClicked(MouseEvent e) {
print("click");
}
});
add(but);
}
public void print(Object obj) {
System.out.println(obj);
}
public Dimension getPreferredSize() { return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT); }
}
運(yùn)行結(jié)果


小結(jié)一下
ActionListener先于MouseListener執(zhí)行
注:某教學(xué)視頻中在JAVA 1.6環(huán)境下ActionListener后于MouseListener執(zhí)行。
鼠標(biāo)監(jiān)聽器和動(dòng)作監(jiān)聽器區(qū)別和聯(lián)系

1.英文名:MouseListener和ActionListener
- 同為接口,繼承同一個(gè)父類EventListenr
- 用時(shí)需定義類實(shí)現(xiàn)接口
2.作用
MouseListener:可用于鼠標(biāo)的單擊、按下、釋放、進(jìn)入、離開,可以用于界面、組件類ActionListener:用于組件上面(JPanel不可以,JFrame也不可以,JLabel也不可以)- JButton可以,JTextField也可以
3.區(qū)別
MouseListener在功能上更加多樣化,在加的對(duì)象上也更有選擇性更廣泛;ActionListener在功能上相對(duì)單一,只能適用于幾種簡(jiǎn)單的組件上且都為單擊事件。ActiMouseListener有e.getActionCommand()方法,而ActionListener沒有,所以不能判斷
究竟按下或者釋放的是哪個(gè)按鈕,所以按鈕多的話,不能用MouseListener。
//MouseListener部分:
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
g.setColor(Color.blue);
draw(100,400,400,400,400,100,10);
draw(400,100,400,400,700,400,10);
draw(700,400,400,400,400,700,10);
draw(400,700,400,400,100,400,10);
}
//同樣的功能ActionListener部分:
if(e.getActionCommand().equals("謝賓斯基三角形")){
g.setColor(Color.blue);
draw(100,400,400,400,400,100,10);
draw(400,100,400,400,700,400,10);
draw(700,400,400,400,400,700,10);
draw(400,700,400,400,100,400,10);
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
學(xué)Java做項(xiàng)目需要學(xué)習(xí)的一些技能
這篇文章主要介紹了學(xué)Java做項(xiàng)目需要學(xué)習(xí)的一些技能,例如JavaSE、Servlet、JSP等,總結(jié)了他們中需要學(xué)習(xí)的東西,都是一些經(jīng)驗(yàn)總結(jié),需要的朋友可以參考下2014-07-07
SpringBoot集成easy-rules規(guī)則引擎流程詳解
這篇文章主要介紹了SpringBoot集成easy-rules規(guī)則引擎流程,合理的使用規(guī)則引擎可以極大的減少代碼復(fù)雜度,提升代碼可維護(hù)性。業(yè)界知名的開源規(guī)則引擎有Drools,功能豐富,但也比較龐大2023-03-03
基于java springboot + mybatis實(shí)現(xiàn)電影售票管理系統(tǒng)
這篇文章主要介紹了基于java springboot + mybatis實(shí)現(xiàn)的完整電影售票管理系統(tǒng)基于java springboot + mybatis,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08
Netty進(jìn)階之EventExecutorGroup源碼詳解
這篇文章主要介紹了Netty進(jìn)階之EventExecutorGroup源碼詳解,EventExecutorGroup繼承了JDK的ScheduledExecutroService,那么它就擁有了執(zhí)行定時(shí)任務(wù),執(zhí)行提交的普通任務(wù),需要的朋友可以參考下2023-11-11
IDEA創(chuàng)建Maven項(xiàng)目一直顯示正在加載的問題及解決
這篇文章主要介紹了IDEA創(chuàng)建Maven項(xiàng)目一直顯示正在加載的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
Java實(shí)現(xiàn)兩個(gè)隨機(jī)數(shù)組合并進(jìn)行排序的方法
本文主要介紹了Java實(shí)現(xiàn)兩個(gè)隨機(jī)數(shù)組合并進(jìn)行排序的方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09

