程序跑的结果是这样的:
找看看有没有此类
有没有main方法
有没有引入值(String[] args)
31行DrawLine 类的变数demo初始化,指到new DrawLines();
开始new DrawLines()
找到DrawLines的无引数构造函数
父类别(JFrame)的构造函数调用,我不知道里面他干了什么事。。。
执行下列函数(这些函数是父类别JFrame的,因为你没有复写):
setSize(500, 500);
setVisible(true);
setResizable(false);
setLocationRelativeTo(null);
回到32行呼叫demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
程式结束
20 //为什么new产生一个对象的同时会执行此方法
很有可能的原因就是:
你复写了JFrame的Paint(Graphic g)函数
super("实验:直线、圆弧、多边形");
setSize(500, 500);
setVisible(true);
setResizable(false);
setLocationRelativeTo(null);
这五个方法其中一个(或多个)调用了Paint(Graphic g)函数,所以他就会执行。
就是这样。
是Jframe自己调用的
JFrame这个组件除了绘制你要求的Line之外还应该能够绘制自身的其它方面,比如Button需要绘制自身的边框、填涂按钮颜色、填涂按钮上的字体等等。
调用super.paint()就是为了除了绘制你需要定制的line之外,还要保证绘制这个组件自身的其它元素!因为在刷新、覆盖等操作中,这个组件需要被重新绘制。
paint()方法的调用是awt线程来控制的,jvm提供了这样一个线程来管理组件的各种工作。一旦这个组件被某个其它窗口覆盖之后,或者最小化最大化的过程中,组件本身都会接到awt的重绘事件申请,组件便调用paint()方法来绘制自身和add到组件之上的各种对象。
也就是说一旦发生变化,自动调用paint()进行重绘!