
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Frame;
import java.awt.Point;
import java.awt.Robot;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JWindow;


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author andrei-eremeev
 */
public class Test {

    private static JWindow window;

    public static void main(String[] args) throws Exception {
        EventQueue.invokeAndWait(new Runnable() {
            public void run() {
                Frame frame = new Frame();
                frame.setBackground(Color.PINK);
                frame.setBounds(100, 100, 500, 400);
                frame.setUndecorated(true);
                frame.setVisible(true);
                window = new JWindow(frame);
                window.setBackground(Color.BLUE);
                window.setAlwaysOnTop(true);
                window.setBounds(200, 200, 200, 200);
                window.addMouseListener(new MouseAdapter() {
                    private Point dragOrigin = null;
                    private Dimension origSize = null;
                    private Point origLoc = null;
                    private boolean left = false;
                    private boolean top = false;
                    private boolean bottom = false;
                    private boolean right = false;

                    @Override
                    public void mousePressed(MouseEvent e) {
                        System.out.println("mousePressed");
                        System.out.println(e);
                        dragOrigin = e.getLocationOnScreen();
                        origSize = window.getSize();
                        origLoc = window.getLocationOnScreen();
                        right = (origLoc.x + window.getWidth() - dragOrigin.x) < 5;
                        left = !right && dragOrigin.x - origLoc.x < 5;
                        bottom = (origLoc.y + window.getHeight() - dragOrigin.y) < 5;
                        top = !bottom && dragOrigin.y - origLoc.y < 5;
                    }

                    @Override
                    public void mouseDragged(MouseEvent e) {
                        System.out.println("mouseDragged");
                        resize(e);
                    }

                    @Override
                    public void mouseReleased(MouseEvent e) {
                        System.out.println("mouseReleased");
                        resize(e);
                    }

                    void resize(MouseEvent e) {
                        System.out.println(e);
                        Point dragDelta = e.getLocationOnScreen();
                        dragDelta.translate(-dragOrigin.x, -dragOrigin.y);
                        Point newLoc = new Point(origLoc);
                        newLoc.translate(dragDelta.x, dragDelta.y);
                        Dimension newSize = new Dimension(origSize);
                        if (left || right) {
                            newSize.width += right ? dragDelta.x : -dragDelta.x;
                        }
                        if (top || bottom) {
                            newSize.height += bottom ? dragDelta.y : -dragDelta.y;
                        }
                        if (right || (top || bottom) && !left) {
                            newLoc.x = origLoc.x;
                        }
                        if (bottom || (left || right) && !top) {
                            newLoc.y = origLoc.y;
                        }
                        System.out.println("Original location : " + origLoc);
                        System.out.println("Drag delta : " + dragDelta);
                        System.out.println("Location : " + newLoc + ", bounds : " + newSize);
                        window.setBounds(newLoc.x, newLoc.y, newSize.width, newSize.height);
                    }
                });
                window.setVisible(true);
            }
        });
        Thread.sleep(1000);
        Dimension size = window.getSize();
        Point location = window.getLocation();
        Robot robot = new Robot();
        robot.setAutoDelay(100);
        robot.mouseMove(location.x + size.height - 2, location.y + size.width - 2);
        robot.mousePress(MouseEvent.BUTTON1_DOWN_MASK);
        robot.mouseMove(location.x + size.height, location.y + size.width);
        robot.mouseRelease(MouseEvent.BUTTON1_DOWN_MASK);
        robot.mousePress(MouseEvent.BUTTON1_DOWN_MASK);
        robot.mouseMove(location.x + size.height + 2, location.y + size.width + 2);
        robot.mouseRelease(MouseEvent.BUTTON1_DOWN_MASK);
    }
}