Quote Originariamente inviata da fermat Visualizza il messaggio
-prima di tutto viene disegnato un ovale e non un cerchio: come posso fare per ottenere un cerchio?
Adesso ottieni un ovale (in generale) perché larghezza/altezza sono sostanzialmente controllati solo ed esclusivamente dall'utente.
Se vuoi sempre un cerchio puoi usare la lunghezza su un asse anche per l'altro asse oppure fare una logica più complessa del tipo "quale è il cerchio che sta perfettamente inscritto/centrato in un rettangolo" ma richiede qualche calcolo in più.
Più che altro cambia poi quello che l'utente deve aspettarsi.

Quote Originariamente inviata da fermat Visualizza il messaggio
-inoltre la linea si vede solo quando il mouse viene rilasciato: è possibile far vedere le linee in tempo reale??
Sì ovviamente è possibile. Nota che attualmente w e h (quelli che usi nel drawOval) li assegni solo nel mouseReleased. Basta che il size attuale, quello che l'utente sta cambiando, si rifletta subito, e non solo più al mouseReleased, nel painting.

Banalmente:
g.drawOval(xx, yy, currentRect.width, currentRect.height);


Una nota finale: facendo come ho appena detto, usi currentRect nel paintComponent. Ma la variabile currentRect è inizialmente a null e al primo paintComponent ci sarà un NullPointerException. Quindi o inizializzi currentRect o salti il drawOval se è null.