ใช้ 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) {}
}
ผลลัพธ์

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) {}
}
ผลลัพธ์
