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

Java语言:高亮代码由发芽网提供01packagexline;020304importjavax.swing.*;05importjava.awt.*;0607publ... Java语言: 高亮代码由发芽网提供
01 package xline;
02
03
04 import javax.swing.*;
05 import java.awt.*;
06
07 public class DrawLines extends JFrame {
08 /**
09 * @param args
10 */
11 public DrawLines() {
12 super("实验:直线、圆弧、多边形");//父类的构造函数调用
13 setSize(500, 500);
14 setVisible(true);
15 setResizable(false);
16 setLocationRelativeTo(null);
17 //show();
18 }
19
20 //为什么new产生一个对象的同时会执行此方法
21 public void paint(Graphics g) {
22 super.paint(g);//有什么用,试了下,可以去掉而不影响结果
23 // 直线演示
24 g.setColor(Color.BLUE);
25 g.drawLine(10, 10, 80, 150);
26 g.drawString("直线演示", 50, 50);
27
28 }
29
30 public static void main(String[] args) {
31 DrawLines demo = new DrawLines();
32 demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
33 // TODO 自动生成方法存根
34 }
35
36 }
展开
 我来答
qfxr7260
2014-04-08 · TA获得超过157个赞
知道答主
回答量:174
采纳率:100%
帮助的人:43.8万
展开全部

程序跑的结果是这样的:

  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)函数,所以他就会执行。


就是这样。

追问
可以用api来探求程序内部做了什么吗,比如什么时候用什么调用的paint等等。我在api上找paint找到了好多。。。。怎么样把这段程序的整个流程捋一遍呢,希望学习其方法
追答
你可以看jdk1.x.x_xx/src.zip,里面是各个包的Java代码,你可以找到javax.swing.JFrame.java档查看。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友14a19e1
2014-04-08 · 超过21用户采纳过TA的回答
知道答主
回答量:76
采纳率:0%
帮助的人:51.5万
展开全部
是Jframe自己调用的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
书春致i
2014-04-08 · TA获得超过102个赞
知道答主
回答量:85
采纳率:0%
帮助的人:65.6万
展开全部
JFrame这个组件除了绘制你要求的Line之外还应该能够绘制自身的其它方面,比如Button需要绘制自身的边框、填涂按钮颜色、填涂按钮上的字体等等。
调用super.paint()就是为了除了绘制你需要定制的line之外,还要保证绘制这个组件自身的其它元素!因为在刷新、覆盖等操作中,这个组件需要被重新绘制。
paint()方法的调用是awt线程来控制的,jvm提供了这样一个线程来管理组件的各种工作。一旦这个组件被某个其它窗口覆盖之后,或者最小化最大化的过程中,组件本身都会接到awt的重绘事件申请,组件便调用paint()方法来绘制自身和add到组件之上的各种对象。
也就是说一旦发生变化,自动调用paint()进行重绘!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式