awt 学习笔记5

第4章 颜色和字体
两种颜色模式:索引颜色模式和直接颜色模式

AWT技巧:在应用程序和applet中加载图像
  appet中提供下面的两种重载方法,用于加载图像:
  Applet.getImage(URL url)
  Applet.getImage(URL url,String string)
  由于应用程序不是applet类的扩展——应用程序通常扩展java.awt.Frame——所以它们必须用替代的方法来加载图像。下面列出的java.awt.Toolkit方法就是在应用程序中经常采用的加载图像的方法:
  Toolkit.getImgae(URL url)
  Toolkit.getImage(String string)


加载图像是异步进行的,load→imageUpdate()→repaint()→load直到完成,所以通过FLAGS的值来判断图像加载的情况
ImageObserver.imageUpdate(Image image, int flags, int x, int y, int w, int h)
flags 值
  ABORT      图像加载被中断
  ALLBITS      所有的位都已经加载给图像
  ERROR      在加载过程中发生错误
  FRAMEBITS    多帧图像的一个帧被传送,一般用于动画GIF
  HEIGHT      图像的高度已经可用
  PROPERTIES    图像的属性已经可用
  SOMEBITS    图像的缩放变体的多个位已可用
  WIDTH      图像的宽度已经可用

AWT技巧:在调用paint()方法之前,update()进行背景清除
  无论什么时候调用repaint(),Component.update()方法都会被调用,该方法将首先清除构件中的背景,然后调用paint()。当该方法被设置为缺省行为时,如果构件被连续修改,它能引起闪动。要消除闪动,可覆盖update()直接调用paint()方法。


使用MediaTracker分为下面的三步:
  1)创建MediaTracker实例。
  2)使用MediaTracker.addImage()指明要跟踪的图像对象。
  3)创建try/catch块。try块等待和ID相关的图像完全加载。由于MediaTracker的waitForID方法可能抛出InterruptedException方法,而且不必通过将变量flags和正确的常量求与来判断什么时候图像被完全加载。


  AWT技巧:在AWT构件中,使用系统属性控制图像重画
  在AWT构件中,有下面的两个系统属性影响图像的重画特征:
  awt.image.incrementalDraw
  awt.image.redrawrate
  如果awt.image.incrementalDraw的值是false,则表示即使当它们的位发生改变时图像不会被持续地画出;只有图像被完全加载后,图像才会显示出来。
  awt.image.redrawrate决定动画的速率,其单位是ms。如果不设置该属性的话,其缺省值为100ms。


我们可以通过一些其他的方法,来代替通过指定图像硬编码的URL路径或文件名来加载图像。一般情况下,采用的都是加载图像作为资源的方法。通过类加载器的算法可以指定资源搜索的方式,在该方式下,允许资源位于不同的位置,包括可以位于.jar和.zip文件中。当作为资源被加载时,和图像相关的URL的getContent被调用时返回ImageProducer。一旦得到ImageProducer,Component.createImage(ImageProducer)可能会被调用,并返回一个图像本身的引用。
  加载图像作为资源为加载图像提供了比较通用的机制,该方法不必依赖于图像位于事先知道的位置。此外,还可以开发自定义类加载器,使用搜索方式在网络上搜索资源。

在java.awt.Component中,提供下面的两种方法用来创建图像:
  ·createImage(ImageProducer)
  ·createImage(int width,int height)
java.awt.Toolkit类也具有创建图像能力。在该类中,提供了下面的三种创建图像的方法:
  ·createImage(ImageProducer)
  ·createImage(byte[] bits)
  ·createImage(byte[] bits,int offset,int length)


代码段:
URL url = this.getClass().getResources("资源文件名");//注这个文件要以/开头 这是个相对于项目环境根目录的一个相对位置
//Image img = 上面两个类中的createImage(ImageProducer方法); 下面这两种方法根据不同的分类执行
//Image img = this.createImage((ImageProducer)url.getContent());   applet
//Image img = Toolkit.getDefaultToolkit().createImage((ImageProducer)url.getContent()); application

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值