关于paint

要搞明白paint函数,首先要明白哪些类里面有paint

通过查阅API发现:

java.awt.Component -java.awt.Container -javax.swing.JComponent中都有paint函数,但这几个paint函数是不同的。我们在这里主要关注的是JComponet中的函数。

API

Paint

public void paint(Graphics g)

Swing 调用,以绘制组件。应用程序不应直接调用 paint,而是应该使用 repaint 方法来安排重绘组件。

此方法实际上将绘制工作委托给三个受保护的方法:paintComponentpaintBorder  paintChildren。按列出的顺序调用这些方法,以确保子组件出现在组件本身的顶部。一般而言,不应在分配给边框的 insets 区域绘制组件及其子组件。子类可以始终只重写此方法。只想特殊化 UI(外观)委的 paint 方法的子类应该只重写 paintComponent.

 

java中重写paint方法时,要在该方法中首先通过super.paint()调用父类的paint方法,这样才能保留原来的paint功能。

 

还有一段网上摘抄的话比较有意思,这也是从java文档中翻译过来的:

轻量级部件是怎样被绘制的
  轻量级部件需要一个处在容器体系上的重量级部件提供进行绘画的场所。当这个重量级祖宗被告知要绘制自身的窗体时,它必须把这个绘画的请求转化为对其所有子孙的绘画请求。这是由java.awt.Containerpaint()方法处理的,该方法调用包容于其内的所有可见的、并且与绘画区相交的轻量级部件的paint()方法。因此对于所有覆盖了paint()方法的Container子类(轻量级重量级)需要立刻做下面的事情:   
    
   public class MyContainer extends Container {
   public void paint(Graphics g) {
   // paint my contents first...
   // then, make sure lightweight children paint
   super.paint(g);  
   }
   }
    
   如果没有super.paint(),那么容器(container)的轻量级子孙类就不会显示出来(这是一个非常普遍的问题,自从JDK1.1初次引进轻量级部件之后)

 

未完,待续中。。。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值