当主窗体的大小改变或者窗体被其他窗体覆盖的时候系统会自动调用paintComponet不知道我说的对不对。

解决方案 »

  1.   

    JPanel中初始有调用paintComponet(Graphics g)而你没有写
    NotHelloWorldPane 自己的初始化方法,所以就调用JPanel的初始化方法了
      

  2.   

    如果你自己定义了
    public NotHelloWorldPane(){
    }那么就不会运行如果你定义的是
    public NotHelloWorldPane(){
    super(this)
    }那么运行结果和你现在的一样,是调用父类的初始化
      

  3.   

    liuren2001(小任)说的正确,建议楼主,多看看AWT的工作原理!
      

  4.   

    刚学java,不是太懂,
    我觉得这个原理跟windows下的程序差不多,当窗口需要重画时,会收到WM_PAINT消息
    于是程序响应WM_PAINT处理
    我是用delphi的,delphi中有个控件TCustomControl,收到这个消息时会调用Paint函数,
    paint是虚函数,从TCustomControl派生下来的控件只要在这个函数里画这个新的控件就可了
    而Java的这个paintCompnent就类似paint,java的函数调用除了static,private,final之外
    都是动态绑定,子类重载这个就可
    new NotHelloWorldPane();当你没有写构照函数时,编译器替你合成一个默认构照函数,
    调用的父类的默认构照函数,跟这个类似
    public NotHelloWorldPane(){
    super(this)
    }
      

  5.   

    java子类中的方法会覆盖掉父类中的方法。当你的子类中没有构造方法的时候会调用父类的构造方法,这就好象是把父类的构造方法中的代码拷贝到子类的构造方法中去,这样当然会调用子类的方法,而不去调用父类中已经被覆盖掉的方法。下面有个程序,跟上面的问题相似,它的执行结果是
    JavaHello,而不是Hello:
    class A{
    A(){
    print();
    }
    public void print(){
    System.out.println("Hello");
    }
    }
    public class B extends A{
    public void print(){
    System.out.println("JavaHello");
    }
    public static void main(String[] args){
    B b=new B();
    }
    }