srecord noeq ComponentDragger(Component component) extends MouseAdapter { MouseEvent mouseDownEvent; Component clickedOn; Pt rel; Window window; *(MouseEvent *mouseDownEvent) { if (mouseDownEvent == null) ret; clickedOn = mouseDownEvent.getComponent(); rel = pt( mouseDownEvent.getXOnScreen()-component.getX(), mouseDownEvent.getYOnScreen()-component.getY()); addMouseAndMotionListener(clickedOn, this); } public void mouseDragged(MouseEvent e) { updatePosition(e); } public void mouseReleased(MouseEvent e) { if (e.getButton() != mouseDownEvent.getButton()) ret; updatePosition(e); removeMouseAdapter(clickedOn, this); dragDone(); } void updatePosition(MouseEvent e) { component.setLocation( e.getXOnScreen()-rel.x, e.getYOnScreen()-rel.y); } void dragDone {} }