文档介绍:本章介绍使用Java绘图和在Java中使用图像的方法。学习的主要目标是:
了解绘图容器与坐标系的概念。
掌握Canvas类、Graphics类的基本用法,掌握在组件上绘图的基本步骤,掌握使用Graphics类绘图、绘制字符、显示图片。
掌握绘制任意函数曲线的编程方法,理解徒手绘图和橡皮筋画法的基本思路,理解使用连续位图形成动画的思路的编程方法。
本章学习目标
Java绘图基础
Java的绘图是在容器上进行的,每一个容器都有一个默认的坐标系,该坐标系以容器的左上角为坐标原点(0,0),X轴水平向右,Y轴竖直向下,长度单位为像素,如图7-1所示。注意Y轴的默认方向与解析几何学中设置坐标系的习惯是不同的。
绘图容器与坐标系
图7-1 默认的坐标系
虽然在各种组件上都能绘图,但是常用的绘图容器只用两种。如果是Java Application程序,通常使用的是画布Canvas作为绘图容器。如果是Applet程序,通常使用的就是Applet作为绘图容器,因为Applet本身就是一种容器。
Java绘图基础
画布类Canvas
画布就是屏幕上的一个用于绘图的空白矩形区域,程序不仅可以在画布上绘图,也可以捕获画布上的事件,例如鼠标事件和键盘事件等。在对于Java Application程序,画布Canvas是主要的绘图容器,ponent的子类,是一种比较简单的类,表7-1给出了Canvas类最常用的构造方法。
表7-1 画布类Canvas的构造方法
构造方法
解释
public Canvas()
创建一个画布
Java绘图基础
paint方法和repaint方法
Canvas类最重要的方法是paint方法,一般在画布上绘图时总是要重写paint方法。另一个重要的方法是repaint方法,repaint与paint不同,paint方法是由系统自动调用的,而repaint方法必须由程序显式地调用。有一点需要注意的是,创建一个画布对象后必须用public void setSize(int width, int height)方法设置画布的大小,否则画布是看不见的。表7-2列出了画布类Canvas的常用方法。
表7-2 画布类Canvas常用方法
常用方法
解释
public void paint(Graphics g)
Canvas类的自动绘图方法
public void repaint()
调用paint(Graphics g)
由Component类继承来
public void setBackground(Color c)
设置画布的背景色
public void setSize(int width, int height)
设置画布的大小
Java绘图基础
本书中绘图程序主要以Applet为容器。以下分别给出以Canvas为容器和以Applet为容器的绘图实例,用以示范两种不同方式的绘图方法。
实例在Canvas上绘图
实例在Applet上绘图
Java绘图基础
绘图类Graphics
Graphics类是一个比较特殊的抽象类,无须通过new实例化直接可以使用。使用Graphics类绘图要依附于一个组件,常用的是Applet和Canvas,程序运行时系统都会自动地调用二者的paint()方法完成绘图工作。
ponent的子类,可以通过重写paint(Graphics g)方法,并利用Graphics的g对象进行绘图,这是大多数的情况。ponent的子类,就没有paint(Graphics g)方法供系统自动调用,这时必须使用getGraphics()方法获取一个Graphics对象,然后利用这个对象绘图。
Graphics类提供了几十个绘图方法,可以完成绝大多数的绘图工作,表7-3给出了常用的绘图方法。由于Graphics类特殊性,一般不使用其构造方法来创建实例对象,所以以下只介绍用于绘图的实例方法。
Java绘图基础
表7-3 绘图类Graphics的常用方法
分类
常用方法
解释
直线
public abstract void drawLine(int x1,int y1,int x2,int y2)
依据两端的坐标(x1,y1),(x2,y2)绘制直线
矩形
public void drawRect(int x,int y,int width,int height)
依据左上角坐标(x,y)宽度width高度height绘制矩形
public abstract void clearRect(int x,int y,int width,in