Перемещение изображения мышью - 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(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д