Oppure
public class MioPanel extends JPanel { public Point immP = new Point(0, 0), mpp; public BufferedImage imm = ....; public MioPanel() { addMouseMotionListener(new MouseMotionListener() { @Override public void mouseDragged(MouseEvent e) { if(mmp != null) { immP = new Point(e.getX() - mpp.x, e.getY() - mpp.y); repaint(); } } @Override public void mouseMoved(MouseEvent e) {} }); addMouseListener(new MouseListener() { @Override public void mousePressed(MouseEvent e) { if(new Rectangle(immP.x, immP.y, imm.getWidth(), imm.getHeight().contains(e.getX(), e.getY())) { mpp = new Point(e.getX() - immP.x, e.getY() - immP.y); } } @Override public void mouseReleased(MouseEvent e) { mpp = null; } /* Altri metodi astratti da inserire */ }); } @Override public void paint(Graphics g) { g.drawImage(imm, immP.x, immP.y, this); } }