关于一段java程序的小问题,paint函数是什么时候执行的,没有调用啊

2025-02-24 21:25:59
推荐回答(3个)
回答1:

程序跑的结果是这样的:

  1. 找看看有没有此类

  2. 有没有main方法

  3. 有没有引入值(String[] args)

  4. 31行DrawLine 类的变数demo初始化,指到new DrawLines();

  5. 开始new DrawLines()

  6. 找到DrawLines的无引数构造函数

  7. 父类别(JFrame)的构造函数调用,我不知道里面他干了什么事。。。

  8. 执行下列函数(这些函数是父类别JFrame的,因为你没有复写):
    setSize(500, 500);
    setVisible(true);
    setResizable(false);
    setLocationRelativeTo(null);

  9. 回到32行呼叫demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  10. 程式结束


20     //为什么new产生一个对象的同时会执行此方法

很有可能的原因就是:

  1. 你复写了JFrame的Paint(Graphic g)函数

  2. super("实验:直线、圆弧、多边形");
    setSize(500, 500);
    setVisible(true);
    setResizable(false);
    setLocationRelativeTo(null);

    这五个方法其中一个(或多个)调用了Paint(Graphic g)函数,所以他就会执行。


就是这样。

回答2:

是Jframe自己调用的

回答3:

JFrame这个组件除了绘制你要求的Line之外还应该能够绘制自身的其它方面,比如Button需要绘制自身的边框、填涂按钮颜色、填涂按钮上的字体等等。
调用super.paint()就是为了除了绘制你需要定制的line之外,还要保证绘制这个组件自身的其它元素!因为在刷新、覆盖等操作中,这个组件需要被重新绘制。
paint()方法的调用是awt线程来控制的,jvm提供了这样一个线程来管理组件的各种工作。一旦这个组件被某个其它窗口覆盖之后,或者最小化最大化的过程中,组件本身都会接到awt的重绘事件申请,组件便调用paint()方法来绘制自身和add到组件之上的各种对象。
也就是说一旦发生变化,自动调用paint()进行重绘!