Java監聽器ActionListener與MouseListener的執行順序說明
基本概念
監聽器(Listener)
:監聽器用於監聽web應用中某些對象、信息的創建、銷毀、增加,修改,刪除等動作的發生,然後作出相應的響應處理。當范圍對象的狀態發生變化的時候,服務器自動調用監聽器對象中的方法。常用於統計在線人數和在線用戶,系統加載時進行信息初始化,統計網站的訪問量等等。ActionListener
:ActionListener用於接收操作事件的偵聽器接口。對處理操作事件感興趣的類可以實現此接口,而使用該類創建的對象可使用組件的 addActionListener 方法向該組件註冊。在發生操作事件時,調用該對象的 actionPerformed 方法。MouseListener
:處理鼠標事件的類要麼實現此接口(及其包含的所有方法),要麼擴展抽象類 MouseAdapter(僅重寫所需的方法)。 然後使用組件的 addMouseListener 方法將從該類所創建的偵聽器對象向該組件註冊。當按下、釋放或單擊(按下並釋放)鼠標時會生成鼠標事件。鼠標光標進入或離開組件時也會生成鼠標事件。發生鼠標事件時,將調用該偵聽器對象中的相應方法,並將 MouseEvent 傳遞給該方法。MouseAdapter
:用於接收鼠標事件的抽象適配器類。 這個類中的方法是空的。 此類作為創建偵聽器對象的方便而存在。
開發環境
- 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 自動生成的方法存根 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); } }
運行結果
小結一下
ActionListener先於MouseListener執行
註:某教學視頻中在JAVA 1.6環境下ActionListener後於MouseListener執行。
鼠標監聽器和動作監聽器區別和聯系
1.英文名:MouseListener和ActionListener
- 同為接口,繼承同一個父類EventListenr
- 用時需定義類實現接口
2.作用
MouseListener
:可用於鼠標的單擊、按下、釋放、進入、離開,可以用於界面、組件類ActionListener
:用於組件上面(JPanel不可以,JFrame也不可以,JLabel也不可以)- JButton可以,JTextField也可以
3.區別
MouseListener
在功能上更加多樣化,在加的對象上也更有選擇性更廣泛;ActionListener
在功能上相對單一,隻能適用於幾種簡單的組件上且都為單擊事件。ActiMouseListener
有e.getActionCommand()方法,而ActionListener沒有,所以不能判斷
究竟按下或者釋放的是哪個按鈕,所以按鈕多的話,不能用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); }
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- java中addMouseListener()方法的使用
- JAVA GUI基礎與MouseListener用法
- 基於Java GUI 事件處理方式
- java五子棋小遊戲實現代碼
- Java實現簡單畫畫畫板