本程序演示了如何捕捉和处理鼠标移动和拖拽事件。当鼠标在左边面板中移动或拖拽时,右边JTextArea会显示事件类型及当前光标坐标。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.*;
public class MouseEventDemo {
public static void main(String[] args) {
new NewFrame("Mouse Motion Observer");
}
}
class NewFrame extends JFrame implements MouseMotionListener {
private static final long serialVersionUID = 1L;
private JTextArea txtInfo = new JTextArea(50, 50);
NewFrame(String title) {
super(title);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JScrollPane sp = new JScrollPane(txtInfo);
Container cp = getContentPane();
cp.setLayout(new GridLayout(1, 2));
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(new JLabel("Mouse Motion Testing Area", JLabel.CENTER));
panel.setBackground(Color.CYAN);
cp.add(panel);
cp.add(sp);
panel.addMouseMotionListener(this);
setSize(300, 200);
setVisible(true);
}
@Override
public void mouseDragged(MouseEvent e) {
txtInfo.append("Mouse Dragged (" + e.getX() + ", " + e.getY() + ")\n");
}
@Override
public void mouseMoved(MouseEvent e) {
txtInfo.append("Mouse moved (" + e.getX() + ", " + e.getY() + ")\n");
}
}