Java AWT 提供兩個介面監聽滑鼠事件:
public interface MouseListener extends EventListener {
public void mousePressed(MouseEvent e); // 按下滑鼠鍵
public void mouseReleased(MouseEvent e); // 鬆開滑鼠鍵
public void mouseClicked(MouseEvent e); // 按下並鬆開(點擊)
public void mouseEntered(MouseEvent e); // 滑鼠進入元件
public void mouseExited(MouseEvent e); // 滑鼠離開元件
}
public interface MouseMotionListener extends EventListener {
public void mouseDragged(MouseEvent e); // 按下並移動(拖曳)
public void mouseMoved(MouseEvent e); // 移動未按下
}
Swing 提供 MouseInputListener 同時擴展兩介面。
事件觸發順序: 因點擊是按下+鬆開的結合,事件分派給 mouseClicked() 前,mousePressed() 和 mouseReleased() 已同時被呼叫。
監聽滑鼠事件須實作介面或擴展適配器類。AWT 提供:
java.awt.event.MouseAdapterjava.awt.event.MouseMotionAdapterSwing 為 MouseInputListener 提供 javax.swing.event.MouseInputAdapter。使用適配器毋須實作介面所有方法,只需擴展適配器並覆寫需監聽的方法。
import java.awt.*;
import java.awt.event.*;
public class MouseTest extends Frame {
public MouseTest() {
Button b = new Button("JavaWorld JavaQ&A");
b.addActionListener(e -> System.exit(0));
add(b, BorderLayout.NORTH);
addMouseListener(new MouseHandler());
addMouseMotionListener(new MouseMotionHandler());
}
private class MouseHandler implements MouseListener {
public void mousePressed(MouseEvent e) { System.out.println("mouse pressed"); }
public void mouseClicked(MouseEvent e) { System.out.println("mouse clicked"); }
public void mouseReleased(MouseEvent e) { System.out.println("mouse released"); }
public void mouseEntered(MouseEvent e) { System.out.println("mouse entered"); }
public void mouseExited(MouseEvent e) { System.out.println("mouse exited"); }
}
private class MouseMotionHandler implements MouseMotionListener {
public void mouseMoved(MouseEvent e) { System.out.println("mouse moved"); }
public void mouseDragged(MouseEvent e) { System.out.println("mouse dragged"); }
}
public static void main(String[] args) { new MouseTest().show(); }
}
此程式建立視窗與按鈕,移動滑鼠並按下時,命令列列印文字訊息,讓你直觀看到滑鼠回應與事件對應關係。寫小測試程式是嘗試陌生 API 的好方法。