Dai un'occhiata a questo piccolo esempietto realizzato al volo:
codice:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Prova extends JFrame {
   private JLabel lbl;
   private int posX, posY;
   public Prova() {
      lbl = new JLabel("Label");
      lbl.addMouseListener( new MouseAdapter() {
         public void mousePressed(MouseEvent me) {
            posX = me.getX();
            posY = me.getY();
         }
      });
      lbl.addMouseMotionListener( new MouseMotionAdapter() {
         public void mouseDragged(MouseEvent me) {
            sposta(me.getX(), me.getY());
         }
      });
      getContentPane().add( lbl );
      setUndecorated( true );
      setSize(300, 200);
      setVisible( true );
      addMouseListener( new MouseAdapter() {
         public void mousePressed(MouseEvent me) {
            posX = me.getX();
            posY = me.getY();
         }
      });
      addMouseMotionListener( new MouseMotionAdapter() {
         public void mouseDragged(MouseEvent me) {
            sposta(me.getX(), me.getY());
         }
      });
   }

   private void sposta(int newX, int newY) {
      Point p = getLocation();
      setLocation(p.x + (newX - posX), p.y + (newY - posY));
   }

   public static void main(String [] args) {
      Prova p = new Prova();
   }
}
Il problema sarà poter chiudere l'applicazione...

Per quanto riguarda il fatto che l'applicazione deve rimanere in primo piano... beh... ci ho provato anch'io a suo tempo, utilizzanto il metodo toFront(), ma senza ottenere risultati.
Ora non ricordo se avevo tentato la via del FocusListener, io purtroppo ora non ho tempo per provarla. In pratica dovresti intercettare l'evento focusLost() sul JFrame e, in quel caso, richiamare un toFront() seguito da un requestFocus();


Ciao.