Dùvida de movimento de imagem!

Olá ! A minha dúvida é :roll_eyes: :

**–>Eu tenho uma lblNewLabel onde é ela tem uma imagem :

–>Também consigo mover essa imagem através do mouse.Porém, quando pressiono e seguro a seta na imagem , ela vai para o centro da imagem. O que quero é que a seta não vá para o centro , e sim que a seta fique onde eu pressionar. O código principal é :slight_smile:
:slight_smile:
:slight_smile:

lblNewLabel = new JLabel("");

			 lblNewLabel.setBounds(0, 11, lblImagem.getWidth(),lblImagem.getHeight());
			lblNewLabel.addMouseMotionListener(new MouseMotionAdapter() {

				@Override
				public void mouseDragged(MouseEvent e) {
					lblNewLabel.setLocation(lblNewLabel.getLocation().x + e.getX() - lblNewLabel.getWidth()/2,
							lblNewLabel.getLocation().y + e.getY()-lblNewLabel.getHeight()/2);

				}
			});

Algém poderia me dizer o código ou explicar o que eu deveria fazer?

Vc precisa compensar a diferença da coordenada onde pressionou o mouse. Veja esse exemplo:

/**
 *
 * @author David
 */
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

/**
 *
 * @author David
 */
public class Janela extends JFrame {

    private JLabel lbl;
    private int xPressed;
    private int yPressed;
    
    public Janela() {

        setDefaultCloseOperation( EXIT_ON_CLOSE );
        setSize( 500, 500 );
        setLocationRelativeTo( null );
        setLayout( null );

        lbl = new JLabel( new DummyImage() );
        add( lbl );

        Dimension size = lbl.getPreferredSize();
        lbl.setBounds( 10,
                       10,
                       size.width,
                       size.height );

        lbl.addMouseListener( new MouseAdapter() {
            @Override
            public void mousePressed( MouseEvent e ) {
                xPressed = e.getX();
                yPressed = e.getY();
            }
        });

        lbl.addMouseMotionListener( new MouseAdapter() {

            @Override
            public void mouseDragged( MouseEvent e ) {

                Point p = lbl.getLocation();
                lbl.setLocation( 
                        p.x + e.getX() - xPressed,
                        p.y + e.getY() - yPressed );

            }

        } );

    }

    private class DummyImage extends ImageIcon {

        BufferedImage img;
        int largura = 200;
        int altura = 200;

        public DummyImage() {
            img = new BufferedImage( largura, altura, BufferedImage.TYPE_INT_ARGB );
            Graphics g = img.getGraphics().create();
            g.setColor( new Color( 100, 100, 100 ) );
            g.fillRect( 0, 0, largura, altura );
            g.dispose();
        }

        @Override
        public synchronized void paintIcon( Component c, Graphics g, int x, int y ) {
            g.drawImage( img, 0, 0, null );
        }

        @Override
        public int getIconWidth() {
            return largura;
        }

        @Override
        public int getIconHeight() {
            return altura;
        }

        @Override
        public Image getImage() {
            return img;
        }

    }

    public static void main( String[] args ) {
        EventQueue.invokeLater( new Runnable() {
            public void run() {
                new Janela().setVisible( true );
            }
        } );
    }

}

Eu particularmente prefiro implementar toda a infraestrutura para desenho de imagem dentro de um painel e controlar tudo por uma classe de desenho, mas do jeito que vc está fazendo acredito que vá resolver…

Vou tentar aqui e depois te respondo!