代码如下:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;//绘制距形
class ju extends JPanel
{
Color c;
public ju(Color c)
{
this.c=c;
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(c);
int w=this.getSize().width;
int h=this.getSize().height;
System.out.println(w+"  "+h);
g.fillRect(0,0,w,h);
}
}class san extends JPanel
{
Color c;
public san(Color c)
{
this.c=c;
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(c);
int w=this.getSize().width;
int h=this.getSize().height;
Polygon p=new Polygon();
p.addPoint(w/2,0);
p.addPoint(0,h);
p.addPoint(w,h);
g.fillPolygon(p);
}
}class yuan extends JPanel
{
Color c;
public yuan(Color c)
{
this.c=c;
} public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(c);
int w=this.getSize().width;
int h=this.getSize().height;
g.fillOval(0,0,w,h);
}
}//主JPanel,里面有9个空的panel,每次点击时,就在一个空的panel中加载一个画图类。
class MainP extends JPanel
{
Panel p[]=new Panel[9];
int cnt=0;
MainP()
{
this.setLayout(new GridLayout(3,3));
for(int i=0;i<9;i++)
{
p[i]=new Panel();
p[i].setLayout(new BorderLayout());
this.add(p[i]);
}
}

void add(JPanel tmp) //轮流加载画图类,9个空的panel全加完就不执行。
{
if(cnt>8) return;
p[cnt].add(tmp,"Center");
cnt++;
}
}public class p0327 extends JFrame
{
JButton b1,b2,b3;
JPanel p;
int i=0;
MainP mainPanel=new MainP();
public p0327()
{
b1=new JButton("三角形");
b2=new JButton("矩形");
b3=new JButton("椭圆形");
p=new JPanel();
p.setLayout(new FlowLayout());
Container c=this.getContentPane();
c.setLayout(new BorderLayout());
p.add(b1);
p.add(b2);
p.add(b3);
c.add(p,"North");
c.add(mainPanel,"Center");

b1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
mainPanel.add(new san(Color.red));
validate();
                                     //就是这个地方的问题:
//上句特别,为什么this.validate();就不行 ????
}
});

b2.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
mainPanel.add(new ju(Color.black));
validate();
}
});

b3.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
mainPanel.add(new yuan(Color.orange));
validate();
}
});
}

public static void main(String []args)
{
p0327 obj=new p0327();
obj.setSize(400,400);
obj.setVisible(true);
}
}请哪位帮忙瞅下啊。