Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ความแตกต่างระหว่าง MouseListener และ MouseMotionListener ใน Java

ใช้ MouseListener เมื่อเมาส์นิ่ง (stable) ขณะจัดการ Mouse Event ในขณะที่ใช้ MouseMotionListener เมื่อเมาส์เคลื่อนที่ (in motion) ขณะจัดการ Mouse Event

Mouse Listener

MouseEvent ยิงเมื่อ กด (press) ปล่อย (release) หรือ คลิก (click) (กดแล้วปล่อย) ปุ่มเมาส์ (ซ้าย/ขวา) ที่ Source Object หรือ วาง Pointer ที่ (Enter) และออกจาก (Exit) Source Object

MouseListener ประกาศ 5 เมธอด Abstract:

ไวยากรณ์

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)

ตัวอย่าง MouseListener

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() + "");
    }

    // ต้องมี body ว่างเพื่อ 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) {}
}

ผลลัพธ์

ความแตกต่างระหว่าง MouseListener และ MouseMotionListener ใน Java

MouseMotionListener

MouseEvent ยิงเมื่อ เคลื่อนย้าย (move) และ ลาก (drag) Pointer ที่ Source Object ต้องใช้ MouseMotionListener จัดการ Mouse-Move และ Mouse-Drag

MouseMotionListener ประกาศ 2 เมธอด Abstract:

ไวยากรณ์

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

ตัวอย่าง MouseMotionListener

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) {}
}

ผลลัพธ์

ความแตกต่างระหว่าง MouseListener และ MouseMotionListener ใน Java