Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Khác biệt giữa MouseListener và MouseMotionListener trong Java

Triển khai MouseListener khi chuột yên tĩnh khi xử lý sự kiện chuột, triển khai MouseMotionListener khi chuột đang di chuyển khi xử lý sự kiện chuột.

Mouse Listener

MouseEvent kích hoạt khi nhấn, thả hoặc click (nhấn rồi thả) nút chuột (trái/phải) tại object nguồn hoặc đưa con trỏ vào (enter) và ra (exit) khỏi object nguồn.

Giao diện MouseListener khai báo 5 phương thức trừu tượng:

Cú pháp

public void mouseClicked(MouseEvent evt)
public void mousePressed(MouseEvent evt)
public void mouseReleased(MouseEvent evt)
public void mouseEntered(MouseEvent evt)
public void mouseExited(MouseEvent evt)

Ví dụ

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

public class MouseListenerTest extends JFrame implements MouseListener {
    private JTextField tfMouseX, tfMouseY;

    public MouseListenerTest() {
        setLayout(new FlowLayout());
        add(new Label("X-Click: "));
        tfMouseX = new JTextField(10);
        tfMouseX.setEditable(false);
        add(tfMouseX);
        add(new Label("Y-Click: "));
        tfMouseY = new JTextField(10);
        tfMouseY.setEditable(false);
        add(tfMouseY);
        addMouseListener(this);
        setTitle("MouseListener Test");
        setLocationRelativeTo(null);
        setSize(350, 100);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args) {
        new MouseListenerTest();
    }

    @Override
    public void mouseClicked(MouseEvent evt) {
        tfMouseX.setText(evt.getX() + "");
        tfMouseY.setText(evt.getY() + "");
    }

    // Need empty body to compile
    @Override public void mousePressed(MouseEvent evt) {}
    @Override public void mouseReleased(MouseEvent evt) {}
    @Override public void mouseEntered(MouseEvent evt) {}
    @Override public void mouseExited(MouseEvent evt) {}
}

Kết quả

Khác biệt giữa MouseListener và MouseMotionListener trong Java

MouseMotionListener

MouseEvent cũng kích hoạt khi di chuyển và kéo thả con trỏ chuột tại object nguồn. Cần MouseMotionListener để xử lý mouse-move và mouse-drag.

MouseMotionListener khai báo 2 phương thức trừu tượng:

Cú pháp

public void mouseDragged(MouseEvent e)
public void mouseMoved(MouseEvent e)

Ví dụ

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

public class MouseMotionListenerTest extends JFrame implements MouseListener, MouseMotionListener {
    private JTextField tfMouseClickX, tfMouseClickY;
    private JTextField tfMousePositionX, tfMousePositionY;

    public MouseMotionListenerTest() {
        setLayout(new FlowLayout());
        add(new Label("X-Click: "));
        tfMouseClickX = new JTextField(10);
        tfMouseClickX.setEditable(false);
        add(tfMouseClickX);
        add(new Label("Y-Click: "));
        tfMouseClickY = new JTextField(10);
        tfMouseClickY.setEditable(false);
        add(tfMouseClickY);
        add(new JLabel("X-Position: "));
        tfMousePositionX = new JTextField(10);
        tfMousePositionX.setEditable(false);
        add(tfMousePositionX);
        add(new JLabel("Y-Position: "));
        tfMousePositionY = new JTextField(10);
        tfMousePositionY.setEditable(false);
        add(tfMousePositionY);
        addMouseListener(this);
        addMouseMotionListener(this);
        setTitle("MouseMotionListener Test");
        setSize(400, 120);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args) {
        new MouseMotionListenerTest();
    }

    @Override
    public void mouseClicked(MouseEvent evt) {
        tfMouseClickX.setText(evt.getX() + "");
        tfMouseClickY.setText(evt.getY() + "");
    }

    // Empty body for compilation
    @Override public void mousePressed(MouseEvent evt) {}
    @Override public void mouseReleased(MouseEvent evt) {}
    @Override public void mouseEntered(MouseEvent evt) {}
    @Override public void mouseExited(MouseEvent evt) {}

    @Override
    public void mouseMoved(MouseEvent evt) {
        tfMousePositionX.setText(evt.getX() + "");
        tfMousePositionY.setText(evt.getY() + "");
    }

    // Empty body to compile
    @Override public void mouseDragged(MouseEvent evt) {}
}

Kết quả

Khác biệt giữa MouseListener và MouseMotionListener trong Java