14.1 绘制基本图形
Component类有一个方法public void paint(Graphics g),程序在其子类中重写这个方法。当程序运行时,java运行环境会用Graphics2D(Graphics的一个子类)将参数g实例化,对象g就可以重写paint方法的组件上内绘制图形、图像等
Graphics2D的“画笔”分别使用draw和fill方法来绘制和填充一个图形
组件都是矩形形状,组件本身有一个默认的坐标系,组件的左上角的坐标值是(0,0)
1.直线:使用java.awt.geom包中的Line2D的静态内部类Double创建直线对象:new Line2D.Double(double x1,double y1,double x2,double y2);创建起点(x1,y1)到终点(x2,y2)的直线
2.矩形:new Line2D.Double(double x,double y,double w,double h);
3.圆角矩形:new RoundRectangle2D.Double(double x,double y,double w,double h,double arcw,double arch);
4.椭圆:new Ellipse2D.Double(double x,double y,double w,double h);
5.绘制圆弧:new Arc2D.Double(double x,double y,double w,double h,double start,double extent ,int type);最后一个参数type取值:Arc2D.OPEN、Arc2D.CHORD、Arc2D.PIE决定弧是开弧、弓弧和饼弧
14.2 变换图形
有时需要平移、缩放或旋转一个图形,可以使用AffineTransform类来实现对图形的这些操作
将图形沿顺时针或逆时针以(x,y)为轴点旋转number个弧度:
—trans.rotate(60.03.1415927/180,100,100);
—g_2dsetTransform(trans);
1.首先使用AffineTransform类创建一个对象:AffineTransform trans = new AffineTransform();trans常用的三个方法:(1)translate(double a,double b)
(2)scale(double a,double b)
(3)Rotate(double number,double x,double y)
2.进行需要的变换,比如要把一个矩形绕点(100,100)顺时针旋转60度,那就要先作好准备:trans.rotate(60.03.1415927/180,100,100);
3.把Graphics对象,比如g_2d设置为具有trans这种功能的“画笔”:g_2dsetTransform(trans);假如rect是一个矩形对象,那g_2d.draw(rect)画的就是旋转后的矩形的样子,注意不要第(2)步和第(3)步颠倒
14.3 图形的布尔运算
两个图形进行布尔运算之前,必须分别用这两个图形创建两个Area区域对象,例如:
——Area a1 = new Area(T1);
——Area a2 = new Area(T2);
a1就是图形T1所围成的区域;a2就是T2所围成的区域,a1调用add方法:a1.add(a2);之后a1就变成a1和a2进过布尔“或”运算后的图形区域,可以用Graphics2D对象g来绘制或填充一个Area对象(区域):
——g.draw(a1);
——g.fill(a1);
14.4 绘制钟表
钟表可以显示当前本机的时间,在这里要用到一个数学公式,如果一个圆的圆心是(0,0),那么对于给定圆上的一点(x,y),该点按顺时针旋转α弧度后的坐标(m,n)由下列公式计算:
——m=xcos(α)-ysin(α)
——n =ycos(α)+xsin(α)
14.5绘制图像
1.加载图像:组件调用getToolkit()方法可以返回这个对象的引用。Tollkit类的对象调用方法:Image getImage(String fileName)或Image getImage(File file)可以返回一个对象,该对象封装着参数file(或参数fileName)指定的图像文件
2.绘制图像:public boolean drawImage(Image img,int x,int y,ImageObserver observer);参数img是被绘制的Image对象,x,y是要绘制
14.6 播放音频
用Java可以编写.au、.aiff、.wav、.midi、.rfm格式的音频的程序
假设音频文件hello.wav位于应用程序当前目录中,播放音频的步骤如下:
1.创建File对象:File musicFile = new File(“hello .wav”);
2.获取URI对象(URI类属于java.net包):URI uri=musicFile.toURI();
3.获取URL对象:URL url=uri.toURL();
4.创建音频对象(AudioClip和Applet类属于java.applet包):AudioClip clip = Applet.newAudioClip(url);
播放、循环与停止
▶clip.play() 开始播放
▶◀clip.loop() 循环播放
■clip.stop()停止播放