Il metodo drawOval vuole come primi due parametri le coordinate del angolo in alto a sinistra del rettangolo contenente l'ovale e come successivi due parametri diametro orizzontale e verticale dell'ovale(in caso di cerhci i valori devono essere uguali).
Non salvare altezza e larghezza nel costruttore, ma utilizza due variabili locali nel metodo paintComponent, cosi' vengono calcolate ad ogni iterazione e il layout diventa liquido.
codice:
public class DisegnaCerchi extends JPanel {
//Il padding e la distanza dal bordo del JPanel, la utilizzo quando disegno il cerchio.
public static final int PADDING = 5;
public DisegnaCerchi() {}
public void paintComponent(Graphics abc) {
super.paintComponent(abc);
//calcolo le dimensioni come il minimo dei lati del pannello.
//Casto a int perche' i metodi restituiscono double.
//nota non uso this.getHeight(), ma this.getSize().getHeight().
int dimensioni = (int)(Math.min(this.getSize().getWidth, this.getSize().getHeight()));
abc.drawOval(PADDING,PADDING,dimensioni-(PADDING*2),dimensioni-(PADDING*2));
}
}