// This class uses the border of the component that caught // the mouse event to determine the drag direction. sclass WindowResizeDragger extends MouseAdapter { int cornerSize = 10; // how big do we assume the corners are MouseEvent mouseDownEvent; JComponent src; Pt rel; Window window; Rect originalPosition; int xDrag, yDrag; // -1, 0 or 1 depending on what we are dragging *(MouseEvent *mouseDownEvent) { if (mouseDownEvent == null) ret; src = optCast JComponent(mouseDownEvent.getComponent()); if (src == null) ret; window = getWindow(src); if (window == null) ret; srcBounds = toRect(boundsOnScreen(src)); originalPosition = toRect(getBounds(window)); Pt mouse = pt(mouseDownEvent.getXOnScreen(), mouseDownEvent.getYOnScreen()); if (distance(srcBounds. mouse. rel = pt( mouseDownEvent.getXOnScreen()-window.getX(), mouseDownEvent.getYOnScreen()-window.getY()); addMouseAndMotionListener(src, this); } public void mouseDragged(MouseEvent e) { updatePosition(e); } public void mouseReleased(MouseEvent e) { if (e.getButton() != mouseDownEvent.getButton()) ret; updatePosition(e); removeMouseAdapter(window, this); dragDone(); } void updatePosition(MouseEvent e) { window.setLocation( e.getXOnScreen()-rel.x, e.getYOnScreen()-rel.y); } void dragDone {} }