Перемещение изображения мышью - Java

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Я пытаюсь добиться перемещения изображения мышью, нашел код, который данную задачу выполняет. Но при запуске это изображение во-первых движется не точно за мышью, а лишь в ее сторону. А во-вторых при движении изображение дергается. Не могли бы вы подсказать в чем может быть проблема?
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.io.File;

public class SampleImage extends JFrame {
 
    public SampleImage() throws HeadlessException {
        setTitle("Sample Drag and Drop Image");
        setSize(new Dimension(800,600));
        setLayout(null);
 
        File file = new File("mallet.png");
        final JLabel label = new JLabel();
        label.setBounds(10, 10, 50, 50);
        label.setIcon(new ImageIcon(file.getAbsolutePath()));
        add(label);
 
        label.addMouseMotionListener(new MouseMotionListener() {
            @Override
            public void mouseDragged(MouseEvent e) {
                label.setLocation(e.getX(),e.getY());
            }
 
            @Override
            public void mouseMoved(MouseEvent e) {
 
            }
        });
    }
 
    public static void main(String[] args) {
        JFrame frame = new SampleImage();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

Решение задачи: «Перемещение изображения мышью»

textual
Листинг программы
import java.awt.Component;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
 
import javax.swing.*;
 
/**
 *
 * @author Nicholas White
 */
public class SampleImage extends JFrame {
 
    public SampleImage() {
 
       JLabel label = new JLabel(new ImageIcon("C:/Users/Пользователь/Documents/NetBeansProjects/SampleImage/build/classes/sampleimage/king_black.png"));
        
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setContentPane(new MyPanel(label));
        frame.setSize(600, 400);
        frame.setVisible(true);
       
    }
 
    public static void main(String[] args) {
        new SampleImage();
    }
}
 
class MyPanel extends JPanel implements MouseListener, MouseMotionListener{
    
   int prevX, prevY;
   JLabel label;
 
    public MyPanel(JLabel label) {
        this.label = label;
        addMouseMotionListener(this);
        addMouseListener(this);
        add(label);
        
    }
 
    @Override
    public void mouseClicked(MouseEvent e) {
        
    }
 
    @Override
    public void mousePressed(MouseEvent e) {
        prevX = label.getX() - e.getX();
        prevY = label.getY() - e.getY();
        
        Component c = e.getComponent();
        if(c instanceof JLabel){
            updateLocation(e);
        }
    }
 
    @Override
    public void mouseReleased(MouseEvent e) {
        Component c = e.getComponent();
        if(c instanceof JLabel){
            updateLocation(e);
        }
    }
 
    @Override
    public void mouseEntered(MouseEvent e) {
       
    }
 
    @Override
    public void mouseExited(MouseEvent e) {
        
    }
 
    @Override
    public void mouseDragged(MouseEvent e) {
            updateLocation(e);
    }
 
    @Override
    public void mouseMoved(MouseEvent e) {
       
    }
 
    private void updateLocation(MouseEvent e) {
        label.setLocation(prevX + e.getX(), prevY + e.getY());
        repaint();
    }
    
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5