ciao andbin.

allora, per il primo problema ho risolto banalmente così:
codice:
g.drawOval(xx, yy, w, w);
in effetti non ci avevo pensato.

per il secondo problema.
currentRect è un oggetto Rectangle.
ho modificato il metodo così:
codice:
        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(buff, 0, 0, this);
            g.setColor(Color.RED);
            switch (forma) {
                case "rectangle":
                    if (done) {
                        g.drawRect(xx, yy, currentRect.width, currentRect.height);
                    }
                    break;
                case "circle":
                    if (done) {
                        g.drawOval(xx, yy, currentRect.width, currentRect.width);
                    }
                    break;
                default:
                    break;
            }
        }
non ottengo errori in quanto ci pensa la variabile done.
solo che con la forma rettangolo nessun problema, mentra con il cerchio si, in quanto ottengo cmq un rettangolo.
penso che dipenda dal fatto che currentRect è un oggetto Rectangle.
c'è un qualche oggetto che rappresenti un ovale??