·第七讲 Java2基本图形绘制
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三讲Java2D图形绘制基础
内容提要•Java2D 概述
•矢量图编程
•位图编程
•绘制几何图形
•填充图形
•图形变换
1 Java2D 概述
•Java 提供的一组API,用于处理2D图形及图像
功能:
•绘制和填充简单及复杂的形状
•裁剪、合成和透明度
•图像处理和变换
•高级字体处理和字符串格式化
•Java系统及应用程序是如何实现图形功能的呢?首先,Java系统在AWT构件类的根类Component类中预置了一种称作Paint (Graphics g)的方法,该方法的参数是一个图形类对象Graphics(g),通常它是由系统自动生成而不是由用户程序来实例化的,在类Graphics中系统预置了大量的用于图形处理与输出的方法,
•在Paint()方法的重新定义中,可以通过Graphics的对象g来调用这些方法进行图形处理与输出。特别注意的是paint()方法的调用是由程序运行的环境而不是程序本身来完成的,每当一个AWT构件首次显示或在部分显示已被破坏而必须刷新时该方法被自动地调用。显示的破坏可能发生在任何时刻,因此,你的程序必须能在任意时刻更新显示。
坐标系统
一个绘画设备的默认坐标系统的原点在左上角。X轴由左向右增加,Y轴由上向下增加。对于基于像素的设备单位是像素,对于打印机是点。
分为两个坐标空间:
用户坐标空间(User space)
设备坐标空间(Device space)
重要的类(参见JDK手册)•Graphics类
是所有图形上下文的抽象基类,允许应用程序在组件(已经在各种设备上实现)以及闭屏图像上进行绘制。
•Graphics2D类
为Graphics的扩展类,提供对几何形状、坐标转换、颜色管理和文本布局更为复杂的控制。它是用于在Java平台上呈现二维形状、文本和图像的基础类。
•Shape类(抽象类)
提供了表示一些几何形状的对象的定义。
用于表示图形的轮廓以及确定该轮廓如何将
2D 平面划分成内点和外点的规则。
每个Shape 对象都提供返回值,以获取几何
形状的边框,确定点或矩形是部分还是全部位于Shape 内部。
Java2D 图形渲染(Render)
原理:
•渲染过程与设备无关
•通过Graphics(2D)对象来实施
•当组件(component)需要显示时自动调用paint()或update()方法
方法分类:
1.绘制形状(shape对象)
2.设置绘制的效果
2 绘制几何图形
图形绘制框架:
•建立应用程序主类
•生成JFrame对象和JPanel对象,并将JPanel对象添加到Jframe对象中
•重载JPanel对象的paint()方法,在其中添加绘制图形的代码
•在main()中对应用程序主类进行实例化
矢量图编程
使用Graphics2D对象:
1.首先获取Graphics2D对象
public void paint (Graphics g) {
Graphics2D g2 = (Graphics2D) g;
... }
2. 建立几何图形对象(java.awt.geom包中定义了各种
Shape对象),例如:
Line2D line = new Line2D.Double(x1,y1,x2,y2);
3. 设置绘制效果(边框颜色、边框类型等)
4. 调用Graphics2D的draw()方法
矢量图编程举例
•import java.applet.*;
•import java.awt.geom.*;
•import java.util.*;
•public class RandomShapes extends Applet {
•//here's the shape used for drawing
•private Shape shape;
•//applet init event
•public void init() {
•shape = new Rectangle2D.Double(-1.0, -1.0, 1.0,
1.0);
•}
•public void paint(Graphics g) {
•//create an instance of Graphics2D
•Graphics2D g2d = (Graphics2D)g;
•//save the identity transform
•AffineTransform identity = new AffineTransform();•//create a random number generator
•Random rand = new Random();
•//save the window width/height
•int width = getSize().width;
•int height = getSize().height;
•//fill the background with black
•g2d.setColor(Color.BLACK);
•g2d.fillRect(0, 0, width, height);