虽然会用,但对swing的运行规则或机制不太理解。

SilentHunter460 2020-10-28 11:11:03
这是个非常简单的swing例子,更复杂的功能我也基本能达成了。但是运行机制不理解。
我在paint方法里画了一个长方形,运行就可以看到结果。
但是,你看代码里没有一句话是调用paint方法,它怎么就自动被调用了?paint方法参数要传一个Graphics对象,然而我并没有创建Graphics对象,它怎么就自动有了?

import java.awt.*;

public class A extends Frame {

public A(){
this.setVisible(true);
}

@Override
public void paint(Graphics g) {
g.fillRect(50, 50, 180, 120);
}

public static void main(String[] args) {
new A();
}
}
...全文
6737 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_39936465 2020-10-29
  • 打赏
  • 举报
回复
引用 4 楼 qq_16774199 的回复:
Frame源码的构造方法我看了,兜兜转转的,没有明显地看到调用paint方法。 鉴于目前读源码能力不够,无法理解它们是如何被自动调用的,只知道反正被调用了。
不止要看frame的源码,还要看frame的父类的源码,可能还要看frame父类的父类,java源码很多都是套娃,要揭开很多层后你才能看清原理。
qq_39936465 2020-10-28
  • 打赏
  • 举报
回复
引用 楼主 qq_16774199 的回复:
这是个非常简单的swing例子,更复杂的功能我也基本能达成了。但是运行机制不理解。 我在paint方法里画了一个长方形,运行就可以看到结果。 但是,你看代码里没有一句话是调用paint方法,它怎么就自动被调用了?paint方法参数要传一个Graphics对象,然而我并没有创建Graphics对象,它怎么就自动有了?
import java.awt.*;

public class A extends Frame {

      public A(){
            this.setVisible(true);
      }

      @Override
      public void paint(Graphics g) {
            g.fillRect(50, 50, 180, 120);
      }

      public static void main(String[] args) {
            new A();
      }
}
这些问题你需要分析源码,一般都是在构造法或者静态代码块中实现。
SilentHunter460 2020-10-28
  • 打赏
  • 举报
回复
感觉好像是未经同意就创建了Graphics对象,私自运行paint方法。
qybao 2020-10-28
  • 打赏
  • 举报
回复
放心,你写出来的方法不会白写的,底层会自动调用的。 你可以参考源码的paintComponent方法
nayi_224 2020-10-28
  • 打赏
  • 举报
回复
你当然找不到了,因为它根本没调用paint,而是执行的这个
SilentHunter460 2020-10-28
  • 打赏
  • 举报
回复
引用 3 楼 ??PURPLE CLOUD ? 的回复:
用new A()创建继承了Frame的对象后就会调用Frame的构造函数。可以打开源码里的Frame类构造函数看。
Frame源码的构造方法我看了,兜兜转转的,没有明显地看到调用paint方法。 鉴于目前读源码能力不够,无法理解它们是如何被自动调用的,只知道反正被调用了。
??PURPLE CLOUD ? 2020-10-28
  • 打赏
  • 举报
回复
用new A()创建继承了Frame的对象后就会调用Frame的构造函数。可以打开源码里的Frame类构造函数看。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧