import javax.swing.*;
import java.awt.*;
public class Main {
  JPanel p;
  JFrame f;
  drawonpanel pp;
  public Main() {
    p = new  JPanel();
    f = new JFrame();
    f.getContentPane().add(p,BorderLayout.CENTER);
    f.setBounds(300,300,400,400);
    f.setVisible(true);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   // f.pack();
    f.show();
    pp = new drawonpanel(p);
    new Thread(pp).start();
  }  public static void main(String args[]){
    new Main();
  }
}
import javax.swing.*;
import java.awt.*;public class drawonpanel implements Runnable{
  Graphics g;
  int i=0;
  public drawonpanel(JPanel p) {
    g = p.getGraphics();
  }
  public void run(){
    while(true){
      try{
        Thread.sleep(100);
      }catch(Exception e){}
      g.drawString("i am a boy!", 50 + i, 50 + i);
      i+=20;
    }
    //g.drawLine(20,30,100,20);
  }
}如何解决呢?

解决方案 »

  1.   

    public class MyCanvas extends JPanel{    //继承并扩展JPanel类
        public void paintComponent(Graphics g){//当控件发生变化时,会调用此方法
          g.setColor(Color.red);               //所以需要重载此方法
          g.drawArc(10,10,100,100,0,360);
          g.drawRect(50,50,100,100);
          g.drawString("测试",30,30);
        }
      }
    当你用到JPanel的地方就用MyCanvas代替