import java.awt.event.*;
import javax.swing.*;
import java.lang.*;
import java.awt.*;
public class JinWu extends JFrame 
{
static int i,j,k,l;
static JFrame f=new JFrame();
String str[]={"左","上","右","下"};
JButton b[]=new JButton[str.length];
JPanel p=new JPanel();
public JinWu()
{
Initbutton();
p.setLayout(new FlowLayout());
f.setSize(600,200);
Init();
repaint();
}
public void Init()
{
i=(int)(Math.random() * 100) % 4;
     do
     {
     j=(int)(Math.random() * 100) % 4;
} while(j==i);
do
{
k=(int)(Math.random() * 100) % 4;
}while(k==i||k==j);
do
{
l=(int)(Math.random() * 100) % 4;
}while(l==i||l==j||l==k);
}
protected void paint()
{
      p.add(b[i]);
p.add(b[j]);
p.add(b[k]);
p.add(b[l]);
f.add(p);
}
    public void Initbutton()
{
for(int i=0;i<4;i++)
{
b[i]=new JButton(str[i]);
}
}
public static void main(String [] args)
{
JinWu jw=new JinWu();
f.setVisible(true);
}
}我想随机显示四个button 但是repaint函数却不调用paint函数 怎么回事啊? 

解决方案 »

  1.   

    在Swing中, repaint调用的是paintComponent(Graphics g), 而不是paint(Graphics g)

    public  void paint(Graphics g)
    {
    super.paint(g);
    System.out.print("sssssssssss");
          f.getContentPane().add(b[i]);
    f.getContentPane().add(b[j]);
    f.getContentPane().add(b[k]);
    f.getContentPane().add(b[l]);
    g.dispose();
    //f.add(p);
    } 换成下面的试试
    public  void paintComponent(Graphics g)
    {
    super.paintComponent(g);
    System.out.print("sssssssssss");
          f.getContentPane().add(b[i]);
    f.getContentPane().add(b[j]);
    f.getContentPane().add(b[k]);
    f.getContentPane().add(b[l]);
    g.dispose();
    //f.add(p);

    还是同样的回答, 至于能不能随机显示, 那就得看你的程序中其他部分是否正确了