使用affinetransform进行图像的拖动时,鼠标的位置总是处于图像的左上角。
如何改变鼠标的位置,使得鼠标可以点中图像中的任意位置而进行拖动?

解决方案 »

  1.   

    下面的程序也体现了这个问题,不管当鼠标点中正方形的哪个部分,当拖动时,正方形自动跳到鼠标的右下角。import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Point;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseMotionListener;
    import java.awt.geom.AffineTransform;
    import java.awt.geom.Point2D;
    import java.awt.geom.Rectangle2D;
    import java.awt.geom.Point2D.Double;import javax.swing.JFrame;
    import javax.swing.JPanel;public class AffineTest extends JFrame {   
        /**
         *
         */
        private static final long serialVersionUID = 1L;    public Rectangle2D.Double rect = new Rectangle2D.Double(30,50,60,60);
        public double movex = 0 ,movey = 0;
        Point2D clickPoint = new Point2D.Double(0,0);
        public AffineTest()
        {
            this.setSize(600,600);
            this.setLocationRelativeTo(null);
            this.add(new DrawingPanel());
            this.setVisible(true);
           
        }
       
       
        private class DrawingPanel extends JPanel
        {
            public DrawingPanel()
            {
                this.addMouseListener(new panelListener());
                this.addMouseMotionListener(new panelListener());
            }
           
            public void paintComponent(Graphics g)
            {
                super.paintComponent(g);
                AffineTransform tx = new AffineTransform();
                if( rect.contains((Point2D.Double)clickPoint))
                {
                tx.translate(movex, movey);
                }
                Graphics2D g2d = (Graphics2D)g;
                g2d.setTransform(tx);
               
               
                g2d.draw(rect);
                repaint();
            }
        }
       
       
        private class panelListener implements MouseListener,MouseMotionListener
        {        @Override
            public void mouseClicked(MouseEvent e) {
                clickPoint.setLocation(e.getX(), e.getY());
                repaint();
               
            }        @Override
            public void mouseEntered(MouseEvent arg0) {
                // TODO Auto-generated method stub
               
            }        @Override
            public void mouseExited(MouseEvent arg0) {
                // TODO Auto-generated method stub
               
            }        @Override
            public void mousePressed(MouseEvent arg0) {
                // TODO Auto-generated method stub
               
            }        @Override
            public void mouseReleased(MouseEvent arg0) {
                // TODO Auto-generated method stub
               
            }        @Override
            public void mouseDragged(MouseEvent arg0) {
                movex = arg0.getX();
                movey = arg0.getY();
            }        @Override
            public void mouseMoved(MouseEvent arg0) {
                // TODO Auto-generated method stub
               
            }
           
        }
       
       
       
        public static void main(String [] args)
        {
            new AffineTest();
        }
       
       
       
    }