lunedì 12 ottobre 2009

Creare una finestra trascinabile in Java

Oggi ho fatto un po' di esercizio con Swing di Java. Swing è uno dei GUI toolkit di Java ed è utile conoscerlo perché è compreso nella piattaforma Java. Swing non è l'unica scelta, ne esistono altre, sul web ci sono alcune risorse che vi possono aiutare nella scelta.

Pero' io ho provato con Swing. Volevo provare una draggable window, una finestra senza bordi che si può spostare trascinandola con il mouse. Ecco il risultato:

import java.awt.Container;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JWindow;

public class DraggableBorderlessWindow {

    public static void main(String[] args) {
        final JWindow win = new JWindow();

        makeDraggable(win);

        win.setSize(100, 100);
        win.setVisible(true);
        win.setLocation(100, 100);
    }

    private static void makeDraggable(final Container window) {
        MouseAdapter dragger = new Dragger(window);
        window.addMouseMotionListener(dragger);
        window.addMouseListener(dragger);
    }

    private static class Dragger extends MouseAdapter {

        private int offsetX;
        private int offsetY;
        private final Container window;

        public Dragger(Container window) {
            this.window = window;
        }

        @Override
        public void mousePressed(MouseEvent e) {
            offsetX = window.getX() - e.getXOnScreen();
            offsetY = window.getY() - e.getYOnScreen();
        }

        @Override
        public void mouseDragged(MouseEvent e) {
            window.setLocation(e.getXOnScreen() + offsetX,
                               e.getYOnScreen() + offsetY);
        }

    }
}

0 commenti: