Ho risolto creando una nuova classe, "Cerchio".
I Sorgenti, quindi, sono i seguenti:
1) Creo una classe "Quadrato":
import java.awt.Graphics;
import javax.swing.JComponent;
public class Quadrato extends JComponent{
Quadrato(){
System.out.println("Quadrato istanziato");
}
public void paint(Graphics g) {
g.drawRect (10, 10, 200, 200);
}
}
2) Creo una classe "Cerchio":
import java.awt.Graphics;
import javax.swing.JComponent;
public class Cerchio extends JComponent{
Cerchio(){
System.out.println("Cerchio istanziato");
}
public void paint(Graphics g) {
g.drawOval(10, 10, 200, 200);
}
}
3) Creo una classe "Gui" che istanzia un oggetto "Quadrato" ed un oggetto "Cerchio". Al premere del bottone "Cambia", cancella l'oggetto "Quadrato", nel BorderLayout.Center, e ci aggiunge l'oggetto "Cerchio".
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Gui {
Quadrato q;
Cerchio c;
Gui(){
System.out.println("G.U.I. istanziata");
q = new Quadrato();
c = new Cerchio();
JFrame frame = new JFrame("Grafica");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(450,450);
frame.setVisible(true);
JButton button = new JButton("Cambia");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Cambia figura");
frame.getContentPane().remove(q);
frame.getContentPane().add(BorderLayout.CENTER, c);
frame.revalidate();
frame.repaint();
}
});
frame.getContentPane().add(BorderLayout.CENTER, q);
frame.getContentPane().add(BorderLayout.SOUTH, button);
frame.repaint();
frame.setVisible(true);
}
}
4) La classe "Main", infine, istanzia "Gui".
public class Main {
static Gui g;
public static void main(String[] args) {
g = new Gui();
}
}
Sarebbe possibile fare ciò con una sola classe "Figure" ?