19.1 绘图类
19.1.1 Graphics 类
Grapics 类是所有图形上下文的抽象基类,它允许应用程序在组件以及闭屏图像上进行绘制。Graphics 类封装了Java 支持的基本绘图操作所需的状态信息,主要包括颜色、字体、画笔、文本、图像等。
Graphics 类提供了绘图常用的方法,利用这些方法可以实现直线、钜形、多边形、椭面、圆弧等形状和文本、图片的绘制操作。另外,在执行这些操作之前,还可以使用相应的方法设置给图的颜色和字体等状态属性。
19.1.2 Graphics2D类
使用Graphics 类可以完成简单的图形绘制任务,但是它所实现的功能非常有限,如无法改变线条的粗细、不能对图片使用旋转和模糊等过滤效果。
Graphics2D 类继承Graphics 类,实现了功能更加强大的绘图操作的集合。由子Graphies2D类是Graphics 类的扩展,也是推荐使用的Java 绘图类。
说明:Graphics2D 是推荐使用的绘图类,但是程序设计中提供的绘图对象大多是Gmphics 类的实例对象,这时应该使用强制类型转换将其转换为Giraphics2D 类型。
例如:
public void paint(Graphics g) {
Graphics2D g2=(Graphics2D) g; //制类型转换为Graphics2D 类型
92......
}
19.2 绘制图形
Java 可以分别使用Graphics 类和 Graphics2D 类绘制图形,Graphics类使用不同的方法实现不同图形的给制。例如,drawLine0方法可以绘制直线,drawRectO方法用于绘制矩形,drawOval0方法用于绘制椭圓形等。
例题19.1
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class DrawCircle extends JFrame{
private final int OVAL_WIDTH=80; //圆形的宽
private final int OVAL_HEIGHT=80; //圆形的高
public DrawCircle() {
initialize(); //调用初始化仿佛
}
private void initialize() { //初始化方法
setSize(300,200); //设置窗体大小
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体关闭模式
setContentPane(new DrawPanel()); //设置窗体面板为绘图面板对象
setTitle("绘图实例"); //设置窗体标题
}
class DrawPanel extends JPanel{ //创建绘图面板
public void paint(Graphics g) { //重写绘制方法
g.drawOval(10, 10, OVAL_WIDTH, OVAL_HEIGHT);//绘制第一个圆形
g.drawOval(80, 10, OVAL_WIDTH, OVAL_HEIGHT);//绘制第二个圆形
g.drawOval(150, 10, OVAL_WIDTH, OVAL_HEIGHT);//绘制第三个圆形
g.drawOval(50, 70, OVAL_WIDTH, OVAL_HEIGHT);//绘制第四个圆形
g.drawOval(120, 70, OVAL_WIDTH, OVAL_HEIGHT);//绘制第五个圆形
}
}
public static void main(String[] args) {
new DrawCircle().setVisible(true);
}
}
结果为:
Graphics 类类常用的图形绘制方法图下:
Graphics2D类是在继承Graphics 类的基础上编写的,它包含了Graphics类的绘图方法并添加了更强的功能,在创建绘图类时推荐使用该类。Graphics2D类可以分别使用不同的类来表示不同的形状,Line2D类、Rectangle2D类等。
要绘制指定形状的图形,需要先创建并初始化该图形类的对象,且这些图形类必须是Shape接口药实现类;然后使用Graphics2D类的draw0方法绘制该图形对象,或者使用610方法填充该图形对象。看法格式如下:
draw(Shape form)
或
fill(Shape form)
其中,form 是指实现Shape 接口的对象。
java.awt.geom 包中提供了如下常用的图形类,这些图形类都实现了Shape 接口:
- Arc2D类
- CubicCurve2D类
- Ellipse2D类
- Line2D类
- Point2D类
- QuadCurve2D类
- Rectangle2D类
- RoundRectangle2D类
例题19.2
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class DrawFrame extends JFrame{
public DrawFrame() {
setTitle("绘图实例2&#