基于该示例,以下程序允许用户将轴的交点拖动到任意点
origin,该点从面板的中心开始。
import java.awt.Cursor;import java.awt.Dimension;import java.awt.EventQueue;import java.awt.Graphics;import java.awt.Point;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.MouseMotionAdapter;import javax.swing.Jframe;import javax.swing.JPanel;public class MouseDragTest extends JPanel { private static final String TITLE = "Drag me!"; private static final int W = 640; private static final int H = 480; private Point origin = new Point(W / 2, H / 2); private Point mousePt; public MouseDragTest() { this.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); this.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { mousePt = e.getPoint(); repaint(); } }); this.addMouseMotionListener(new MouseMotionAdapter() { @Override public void mouseDragged(MouseEvent e) { int dx = e.getX() - mousePt.x; int dy = e.getY() - mousePt.y; origin.setLocation(origin.x + dx, origin.y + dy); mousePt = e.getPoint(); repaint(); } }); } @Override public Dimension getPreferredSize() { return new Dimension(W, H); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); g.drawLine(0, origin.y, getWidth(), origin.y); g.drawLine(origin.x, 0, origin.x, getHeight()); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { Jframe f = new Jframe(TITLE); f.add(new MouseDragTest()); f.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); } }); }}


