java中的paintComponent什么时候被调用
2015-12-13 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
展开全部
当java认为需要重新绘制组件的时候由java调用。
例如在程序中repaint();或者程序窗口最小化,然后恢复。或者程序窗口被遮挡,又显现的时候。
注意观察,这个方法是个受保护的方法,这就是说平常并不用管这个方法,这个方法只在需要继承paintComponent(一般是JFrame)的时候,重写方法,(也可以不重新方法,如果不需要改变绘制组件动作的话)。
下面看这个方法的源代码
public void paintComponents(Graphics g) {
if (isShowing()) {
GraphicsCallback.PaintAllCallback.getInstance().
runComponents(component, g, GraphicsCallback.TWO_PASSES);
}
}
会发现这个方法会调用一个Callback。而
private PaintCallback() {}
public void run(Component comp, Graphics cg) {
comp.paint(cg);
}
发现这个callback 会调用comp.paint(cg);
也就是说调用paintComponent(),归根究底还是调用了写的,paint()方法。
例如在程序中repaint();或者程序窗口最小化,然后恢复。或者程序窗口被遮挡,又显现的时候。
注意观察,这个方法是个受保护的方法,这就是说平常并不用管这个方法,这个方法只在需要继承paintComponent(一般是JFrame)的时候,重写方法,(也可以不重新方法,如果不需要改变绘制组件动作的话)。
下面看这个方法的源代码
public void paintComponents(Graphics g) {
if (isShowing()) {
GraphicsCallback.PaintAllCallback.getInstance().
runComponents(component, g, GraphicsCallback.TWO_PASSES);
}
}
会发现这个方法会调用一个Callback。而
private PaintCallback() {}
public void run(Component comp, Graphics cg) {
comp.paint(cg);
}
发现这个callback 会调用comp.paint(cg);
也就是说调用paintComponent(),归根究底还是调用了写的,paint()方法。
展开全部
1 - paint() 中调用 paintComponent(), paintBorder(), paintChildren()
2 - 最重要的区别是“双缓冲”。Swing 组件的 paint() 中实现了双缓冲,所以不要随便去覆写,会破坏双缓冲的,————建议的方式是覆写 paintComponent()
3 - 覆写 paint(),如果新方法没有去调用 paintChildren(),还会造成子控件不显示,鼠标移上去才显示
4 - 只有极少数的情况可能需要覆写 paint() 方法,通常是为了实现特殊的绘图效果,或者特殊的优化,比如 JViewport 覆写了 paint() 方法,使用“延迟重绘”的方式来合并当滚动条移动时一些特别频繁的重绘请求,等等。
5 - paint方法定义于Component类 awt画布就可以自己重写paint方法,达到自己的目的 paintComponent定义于JComponent类 JComponent类继承了Component类,JPanel类继承了JComponent类 所以在JPanel既有paint方法,又有paintComponent方法 但是paint方法被java开发程序员重写了,进行着大量的复杂工作,如图象缓冲,解决了awt画布的抖动等问题,所以这个方法是不能被重写的,否则你的程序没办法正常工作 于是java开发程序员写了paintComponent方法替代paint方法
2 - 最重要的区别是“双缓冲”。Swing 组件的 paint() 中实现了双缓冲,所以不要随便去覆写,会破坏双缓冲的,————建议的方式是覆写 paintComponent()
3 - 覆写 paint(),如果新方法没有去调用 paintChildren(),还会造成子控件不显示,鼠标移上去才显示
4 - 只有极少数的情况可能需要覆写 paint() 方法,通常是为了实现特殊的绘图效果,或者特殊的优化,比如 JViewport 覆写了 paint() 方法,使用“延迟重绘”的方式来合并当滚动条移动时一些特别频繁的重绘请求,等等。
5 - paint方法定义于Component类 awt画布就可以自己重写paint方法,达到自己的目的 paintComponent定义于JComponent类 JComponent类继承了Component类,JPanel类继承了JComponent类 所以在JPanel既有paint方法,又有paintComponent方法 但是paint方法被java开发程序员重写了,进行着大量的复杂工作,如图象缓冲,解决了awt画布的抖动等问题,所以这个方法是不能被重写的,否则你的程序没办法正常工作 于是java开发程序员写了paintComponent方法替代paint方法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
显示时被paint方法调用。
paint方法会调用paintComponent,paintBorder,paintChildren等方法。
paint方法会调用paintComponent,paintBorder,paintChildren等方法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
paintComponent在对象初始化的时候应该是没有被自动调用,应该时你自己使用该方法时调用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
显示时被paint方法调用。
paint方法会调用paintComponent,paintBorder,paintChildren等方法。
paint方法会调用paintComponent,paintBorder,paintChildren等方法。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询