为什么main里面没有call这个划圆的函数,但是还是画了

weixin_42191571 2018-06-14 06:41:36
我是一个新学java的菜鸟,这个代码实在看不明白。我已经自己debug过很多次了,但是真的不明白为什么main里面没有call paint,但是代码运行的时候paint还是运行了呢?请指点,谢谢

package circle;

import java.awt.Graphics;

import javax.swing.JFrame;

public class NewCircle extends JFrame {
public static void main(String[] args) {
JFrame frame = new NewCircle();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 600);
frame.setVisible(true);
}

public void paint(Graphics g) {
g.drawString("circle 99", 20, 20);

int x0 = getSize().width/2;
int y0 = getSize().height/2;

for(int r=0 ; r<getSize().height/2; r+=10) {

g.drawOval(x0-r,y0-r,r*2,r*2);
}
}
}
...全文
876 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
stacksoverflow 2018-06-14
  • 打赏
  • 举报
回复
引用 1 楼 CosyBarbor 的回复:
public class NewCircle extends JFrame { public static void main(String[] args) { } public void paint(Graphics g) { } } 这样看,都是在NewCircle函数中,中间没有断开、跳出等语句,就会一直执行的。
别乱说!
stacksoverflow 2018-06-14
  • 打赏
  • 举报
回复
JFrame初始化的时候,启动了一个RepaintManager,在RepaintManager中调用了paint方法。 可以这样查看运行时调用路径 public void paint(Graphics g) { new Throwable().printStackTrace(); }
CosyBarbor 2018-06-14
  • 打赏
  • 举报
回复
public class NewCircle extends JFrame { public static void main(String[] args) { } public void paint(Graphics g) { } } 这样看,都是在NewCircle函数中,中间没有断开、跳出等语句,就会一直执行的。
stacksoverflow 2018-06-14
  • 打赏
  • 举报
回复
引用 5 楼 crqnyf 的回复:
其实这个是JFrame类继承其他有关swt包类的关系,肯定是因为这个类NewCircle重写了paint方法,在其父类,祖父类里面有repaint方法,里面生成一个paint时间,会自动调用子类重写的paint方法。源码比较绕。看半天才看懂了
初始化时没有调用repaint方法,你把每一个repaint方法重写试试。
贰玖玖0zero 2018-06-14
  • 打赏
  • 举报
回复
其实这个是JFrame类继承其他有关swt包类的关系,肯定是因为这个类NewCircle重写了paint方法,在其父类,祖父类里面有repaint方法,里面生成一个paint时间,会自动调用子类重写的paint方法。源码比较绕。看半天才看懂了
stacksoverflow 2018-06-14
  • 打赏
  • 举报
回复
问题解决了麻烦结贴,没解决的话我帮你顶上来。

58,454

社区成员

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

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