+1 to @ Answer.
Here is an example that I did, mainly using a JPanel with added MouseAdapter and overriding the mousePressed() and mouseDragged() methods. mouseDragged() will increase the x and y coordinates of the image, respectively, and will be output via paintComponent(...) from JPanel and Graphics2D#drawImage(Image img,int x,int y,ImageObserver io) .
Before clicking and dragging the mouse:

After mouse click and drag:

//necessary imports import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import java.awt.image.BufferedImage; import java.net.URL; import javax.imageio.ImageIO; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; public class Test { /** * Default constructor */ public Test() { initComponents(); } /** * Initialize GUI and components (including ActionListeners etc) */ private void initComponents() { JFrame frame = new JFrame("Test"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setResizable(false); PanPanel pp = null; try { pp = new PanPanel(ImageIO.read(new URL("http://www.sellcar.co.za/wp-content/uploads/2011/01/Porsche_911_Turbo.jpg"))); } catch (Exception ex) { ex.printStackTrace(); } frame.add(pp); //pack frame (size JFrame to match preferred sizes of added components and set visible frame.pack(); frame.setVisible(true); } public static void main(String[] args) { /** * Create GUI and components on Event-Dispatch-Thread */ javax.swing.SwingUtilities.invokeLater(new Runnable() { @Override public void run() { try { //set nimbus look and feel for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) { e.printStackTrace(); } //create GUI instance Test test = new Test(); } }); } } class PanPanel extends JPanel { private int x, y; private int width = 400, height = 400; BufferedImage img; private final static RenderingHints textRenderHints = new RenderingHints(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); private final static RenderingHints imageRenderHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); private final static RenderingHints renderHints = new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); static int startX, startY; public PanPanel(BufferedImage img) { x = 0; y = 0; this.img = img; addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent me) { super.mousePressed(me); startX = me.getX(); startY = me.getY(); } }); addMouseMotionListener(new MouseMotionAdapter() { @Override public void mouseDragged(MouseEvent me) { super.mouseDragged(me); if (me.getX() < startX) {//moving image to right x -= 2; } else if (me.getX() > startX) {//moving image to left x += 2; } if (me.getY() < startY) {//moving image up y -= 2; } else if (me.getY() > startY) {//moving image to down y += 2; } repaint(); } }); } @Override protected void paintComponent(Graphics grphcs) { super.paintComponent(grphcs); Graphics2D g2d = (Graphics2D) grphcs; //turn on some nice effects applyRenderHints(g2d); g2d.drawImage(img, x, y, null); } @Override public Dimension getPreferredSize() { return new Dimension(width, height); } public static void applyRenderHints(Graphics2D g2d) { g2d.setRenderingHints(textRenderHints); g2d.setRenderingHints(imageRenderHints); g2d.setRenderingHints(renderHints); } }
source share