第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