java第14章总结(图形图像与音频)

本文详细介绍Java中如何使用Graphics2D类绘制各种图形,包括直线、矩形、圆角矩形、椭圆、圆弧、文本、曲线及多边形,并讲解了图形变换、布尔运算、绘制图像和音频播放的方法。同时,介绍了如何制作JPG图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

教材内容总结

Component类有一个方法public void paint(Graphics g),程序可以在其子类中重写这个方法。当程序运行时,java运行环境会用Graphicd2D(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);
2  矩形:创建一个左上角坐标是(x,y),宽是w,高是h的矩形对象

new Rextangle2D.Double(double 2,double y,double w,double h);
3   圆角矩形:圆角的长轴和短轴分别为arcw和arch 的圆角矩形对象

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);
6   绘制文本:Graphics2D对象调用drawString(String s,int x,int y)方法从参数x,y指定的坐标位置处,从左向右绘制参数s指定的字符串

7    绘制二次曲线和三次曲线:

QuadCurve2D curve1 = new QuadCurve2D.double(50,30,10,10,50,100);//二次曲线
QuadCurve2D curve2 = new QuadCurve2D.double(50,30,10,10,50,100,100,50,100);//三次曲线
8    绘制多边形:

Polygon polygon = new Polygon();

变换图形

使用AffineTransform类实现图形的平移、缩放或旋转;

AffineTransform trans = new AffineTransform();

对trans用下列三种方法实现图形变换操作:

translate(double a,double b)  将图形在x轴方向移动a个像素单位,y轴方向移动b个像素单位

scale(double a,double b)   将图形在x轴方向缩放a倍,y轴方向缩放b倍

rotate(double number,double x,double y)   将图形眼顺时针或逆时针方向以(x,y)为轴点旋转number个弧度。

图形的布尔运算

1    两个图形进行布尔运算运算之前,必须分别用这两个图形创建两个Area区域对象,例如:

Area a1 = new Area(T1);

 Area a2 = new Area(T2);

2    a1就是图形T1所围成的区域;a2就是T2所围成的区域。那么,a1调用add方法:

a1.add(a2);

3    之后,a1就变成a1和a2经过布尔“或”运算后的图形区域。可以用Graphics2D对象g来绘制或填充一个Area对象(区域):

g.draw(a1);

g.fill(a1);
4   Area类的常用方法:

public void add(Area r)  与参数r或;

public void intersect(Area r)   与参数r与;

public void exclusiveOr(Area rhs)   与参数r异或;

public void subtract(Area rhs)   与参数r差。

绘制钟表

钟表可以显示当前本机的时间。在这里要用到一个数学公式,如果一个圆的圆心是(0,0),那么对于给定圆上的一点(x,y),该点按顺时针旋转α弧度后的的坐标(m,n)由下列公式计算:

m = x×cos(α)-y×sin(α)

n = y×cos(α)+x×sin(α)

绘制图像

1    组件上可以显示图像:

Icon icon = new InageIcon("cat.jpeg");

button.setIcon(icon);

播放音频

(1)创建File对象

     File musicFile=new File("hello.wav");

(2)获取URI对象(URI类属于java.net包)

    URI uri=musicFile.toURI();

(3)获取URL对象

    URI url=uri.toURL();

(4)创建音频对象(AudioClip和Applet类属于java.applet包)

  AudioClip clip=Applet.newAudioClip(url);

(5)播放,循环与停止

    clip.play()  开始播放,

    clip.loop()  循环播放,

    clip.stop()  停止播放。

制作JPG:

(1)用java.awt.image包中的BufferedImage类建立一个BufferedImage对象.

(2)BufferedImage对象调用createGraphics()获得一个Graphics2D对象。

(3)Graphics2D对象调用相应的方法绘制图形。

(4) JPEGCodec用createJPEGEncoder(OutPutStream out)

           返回JPEGImageEncoder对象。

(5)JPEGImageEncoder用encode(Image image)将BufferedImage对象写入到输出流

实验1 Java语言基础 4 一、实验目的 4 二、实验要求 4 三、实验内容 4 (一) 声明不同数据类型的变量 4 (二) 了解变量的使用范围 5 (三) 使用关系运算符和逻辑运算符 5 (四) 使用表达式语句复合语句 6 (五) 使用选择语句 6 (六) 使用循环语句 8 实验2 面向对象编程 11 一、实验目的 11 二、实验要求 11 三、实验内容 11 (一)创建 Applet 应用小程序 11 (二)创建对象并使用对象 12 (三)编写显示当前日期和时间的程序 13 (四)使用修饰符 14 (五)方法中参数传递 15 (六)类的继承性 16 (七)类的多态性 18 实验3 包、接口异常处理 22 一、实验目的 22 二、实验要求 22 三、实验内容 22 (一)了解并使用 Java 的系统包 22 (二)创建并使用自定义包 22 (三)使用接口技术 24 (四)了解异常处理机制 25 实验4 常用系统类的使用 27 一、实验目的 27 二、实验要求 27 三、实验内容 27 (一)了解 Applet 的生命周期 27 (二)使用数学函数类 28 (三)使用日期类 29 实验5 建立图形用户界面 32 一、实验目的 32 二、实验要求 32 三、实验内容 32 (一)创建图形用户界面 32 (二)了解事件处理机制 34 (三)建立独立运行的窗口界面并使用匿名类 36 (四)使用 Swing 组件 39 (五)使用自定义对话框内部类 41 实验6 图形处理 44 一、实验目的 44 二、实验要求 44 三、实验内容 44 (一)使用图形类 Graphics 44 实验7图形处理(二) 47 一、实验目的 47 二、实验要求 47 三、实验内容 47 (一)幻灯机效果——连续显示多幅图像 47 (二)使用滚动条改变背景颜色 48 (三)Applet Application 合并运行 49 (四)创建电闪雷鸣的动画 50 实验8 流文件 53 一、实验目的 53 二、实验要求 53 三、实验内容 53 (一)使用标准数据流的应用程序 53 (二)使用文件输入输出流的应用程序 54 (三)使用随机文件类的应用程序 54 (四)使用数据输入输出流文件输入输出流类的应用程序 55 (五)使用对象输入输出流的应用程序 56 实验9 线程 58 一、实验目的 58 二、实验要求 58 三、实验内容 58 (一)Thread子类的方法实现多线程 58 (二)实现Runnable接口的方法实现多线程 59 实验10 数据库的连接:JDBC 61 一、实验目的 61 二、实验要求 61 三、实验内容 61 (一)配置ODBC数据源 61 (二)编写程序,按照下表的结构建立"student"表 61 (三)编写程序,完成填写功能 62 (四)编写程序,完成查询功能 62
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值