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

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

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

Здравствуйте. Я пытаюсь добиться перемещения изображения мышью, нашел код, который данную задачу выполняет. Но при запуске это изображение во-первых движется не точно за мышью, а лишь в ее сторону. А во-вторых при движении изображение дергается. Не могли бы вы подсказать в чем может быть проблема?
Листинг программы
  1. import javax.swing.*;
  2. import java.awt.*;
  3. import java.awt.event.MouseEvent;
  4. import java.awt.event.MouseMotionListener;
  5. import java.io.File;
  6.  
  7. public class SampleImage extends JFrame {
  8. public SampleImage() throws HeadlessException {
  9. setTitle("Sample Drag and Drop Image");
  10. setSize(new Dimension(800,600));
  11. setLayout(null);
  12. File file = new File("mallet.png");
  13. final JLabel label = new JLabel();
  14. label.setBounds(10, 10, 50, 50);
  15. label.setIcon(new ImageIcon(file.getAbsolutePath()));
  16. add(label);
  17. label.addMouseMotionListener(new MouseMotionListener() {
  18. @Override
  19. public void mouseDragged(MouseEvent e) {
  20. label.setLocation(e.getX(),e.getY());
  21. }
  22. @Override
  23. public void mouseMoved(MouseEvent e) {
  24. }
  25. });
  26. }
  27. public static void main(String[] args) {
  28. JFrame frame = new SampleImage();
  29. frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  30. frame.setVisible(true);
  31. }
  32. }

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

textual
Листинг программы
  1. import java.awt.Component;
  2. import java.awt.event.MouseEvent;
  3. import java.awt.event.MouseListener;
  4. import java.awt.event.MouseMotionListener;
  5.  
  6. import javax.swing.*;
  7.  
  8. /**
  9.  *
  10.  * @author Nicholas White
  11.  */
  12. public class SampleImage extends JFrame {
  13.  
  14.     public SampleImage() {
  15.  
  16.        JLabel label = new JLabel(new ImageIcon("C:/Users/Пользователь/Documents/NetBeansProjects/SampleImage/build/classes/sampleimage/king_black.png"));
  17.        
  18.         JFrame frame = new JFrame();
  19.         frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  20.         frame.setContentPane(new MyPanel(label));
  21.         frame.setSize(600, 400);
  22.         frame.setVisible(true);
  23.        
  24.     }
  25.  
  26.     public static void main(String[] args) {
  27.         new SampleImage();
  28.     }
  29. }
  30.  
  31. class MyPanel extends JPanel implements MouseListener, MouseMotionListener{
  32.    
  33.    int prevX, prevY;
  34.    JLabel label;
  35.  
  36.     public MyPanel(JLabel label) {
  37.         this.label = label;
  38.         addMouseMotionListener(this);
  39.         addMouseListener(this);
  40.         add(label);
  41.        
  42.     }
  43.  
  44.     @Override
  45.     public void mouseClicked(MouseEvent e) {
  46.        
  47.     }
  48.  
  49.     @Override
  50.     public void mousePressed(MouseEvent e) {
  51.         prevX = label.getX() - e.getX();
  52.         prevY = label.getY() - e.getY();
  53.        
  54.         Component c = e.getComponent();
  55.         if(c instanceof JLabel){
  56.             updateLocation(e);
  57.         }
  58.     }
  59.  
  60.     @Override
  61.     public void mouseReleased(MouseEvent e) {
  62.         Component c = e.getComponent();
  63.         if(c instanceof JLabel){
  64.             updateLocation(e);
  65.         }
  66.     }
  67.  
  68.     @Override
  69.     public void mouseEntered(MouseEvent e) {
  70.        
  71.     }
  72.  
  73.     @Override
  74.     public void mouseExited(MouseEvent e) {
  75.        
  76.     }
  77.  
  78.     @Override
  79.     public void mouseDragged(MouseEvent e) {
  80.             updateLocation(e);
  81.     }
  82.  
  83.     @Override
  84.     public void mouseMoved(MouseEvent e) {
  85.        
  86.     }
  87.  
  88.     private void updateLocation(MouseEvent e) {
  89.         label.setLocation(prevX + e.getX(), prevY + e.getY());
  90.         repaint();
  91.     }
  92.    
  93. }

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут