Ho fatto un pò di controlli e ho visto che muovendo il frame interno il metodo che viene chiamato è il repaint(). Quindi mi son concentrato su quello.
Una possibile soluzione che ho trovato è sovrascrivere appunto il metodo di repaint() del JInternalFrame, controllando nella sua nuova implementazione se il frame si trova in prossimità del bordo.
A quel punto se il frame si trova in prossimità del bordo, uso setLocation() e lo metto attaccato al bordo.
Semplice! MA il problema è che setLocation chiama al suo interno il repaint()!!!!!
Quindi si genera ricorsione indiretta, e le cose implodono in un ciclo infinito.
Non riesco però a trovare un metodo per settare la locazione di un JInternalFrame SENZA che questo richiami il repaint()!