Rysowanie odbywa się w metodzie paint() (paintComponent()), ona może rysować różne rzeczy w zależności np. od wartości pewnej zmiennej,a wartość zmiennej zależy od działań użytkownika.
Rysuj raczej na obiekcie klasy JPanel.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class A extends JFrame implements ActionListener
{
private String stan=" ";
//------------------------
public static void main(String[] args)
{
new A();
}
//------------------------
public A()
{
super("Różne figury");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout(2,2));
add(new MyCanvas(this),BorderLayout.CENTER);
JPanel panel=new JPanel();
JButton b=new JButton("Prostokąt");
b.addActionListener(this);
panel.add(b);
b=new JButton("Elipsa");
b.addActionListener(this);
panel.add(b);
b=new JButton("Pustka");
b.addActionListener(this);
panel.add(b);
add(panel,BorderLayout.SOUTH);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
//------------------------
public void actionPerformed(ActionEvent ae)
{
String cmd=ae.getActionCommand();
if(cmd.equals("Prostokąt"))
{
stan="P";
}
if(cmd.equals("Elipsa"))
{
stan="E";
}
if(cmd.equals("Pustka"))
{
stan=" ";
}
repaint();
}
//------------------------
public String getStan()
{
return stan;
}
}
//------------------------------------------------
class MyCanvas extends JPanel
{
private A parent;
//------------------------
public MyCanvas(A parent)
{
super();
this.parent=parent;
setPreferredSize(new Dimension(400,300));
}
//------------------------
public void paint(Graphics g)
{
super.paint(g);
if(parent.getStan().equals("P"))
{
drawRectangle(g);
}
if(parent.getStan().equals("E"))
{
drawEllipsis(g);
}
}
//------------------------
private void drawRectangle(Graphics g)
{
g.setColor(Color.GREEN);
g.fillRect(0,0,100,100);
}
//------------------------
private void drawEllipsis(Graphics g)
{
g.setColor(Color.BLUE);
g.fillArc(50,50,200,100,0,360);
}
}