Se vuoi poter spostare la finestra facendone il drag con il mouse da un punto qualsiasi devi provvedere ad alcune considerazioni: appena l'utente clicca, devi memorizzarti il punto di clic, poi quando dragga devi riposizionare la finestra sulla base della distanza del drag dal punto di clic iniziale, quindi ricalcolare il nuovo punto di clic.
Uno spunto di codice che ho usato in molte mie applicazioni (l'ho usato su pannelli, non su finestre):
codice:
/*
* clicX, clicY, tempX e temtY sono interi
* dragging è ovviamente un booleano
* tutte queste variabili sono dichiarate di classe (quindi visibili ovunque nella classe)
*/
public void mousePressed(MouseEvent me) {
clicX = me.getX();
clicY = me.getY();
tempX = posX;
tempY = posY;
dragging = true;
}
public void mouseDragged(MouseEvent me) {
if ( dragging ) riposizionaFrame(me.getX() - clicX, me.getY() - clicY);
}
private void riposizionaFrame(int x, int y) {
setLocation(tempX + x, tempY + y);
tempX += x;
tempY += y;
posX += x;
posY += y;
}
Il codice l'ho riadattato al volo (nel pannello facevo anche altre cose, come intercettare il tasto destro per dei menu o controllare il ridimensionamento), quindi potrebbero esserci delle sfumature da sistemare.
Ciao.