首页 > 编程笔记 > Java笔记 阅读:7

Java Graphics2D类的用法(附带实例)

要开发高级应用程序,就必须掌握一定的图像处理技术。Java 绘图是 Java 程序开发不可缺少的技术,使用这些技术可以为程序提供数据统计、图表分析等功能,还可以为程序搭配音效,提高程序的交互能力。

Java 程序中,使用 Graphics 类可以完成简单的图形绘制任务,但是它所实现的功能非常有限,如无法改变线条的粗细、不能对图片使用旋转和模糊等过滤效果。

Graphics2D 类继承 Graphics 类,实现了功能更加强大的绘图操作的集合。由于 Graphics2D 类是 Graphics 类的扩展,也是推荐使用的 Java 绘图类。

Graphics2D 类是在继承 Graphics 类的基础上编写的,它包含了 Graphics 类的绘图方法并添加了更强的功能,在创建绘图类时推荐使用该类。Graphics2D 类可以分别使用不同的类来表示不同的形状,如 Line2D 类、Rectangle2D 类等。

要绘制指定形状的图形,需要先创建并初始化该图形类的对象,且这些图形类必须是 Shape 接口的实现类;然后使用 Graphics2D 类的 draw() 方法绘制该图形对象,或者使用 fill() 方法填充该图形对象。语法格式如下:
draw(Shape form)
或:
fill(Shape form)
其中,form 是指实现 Shape 接口的对象。

java.awt.geom 包中提供了如下常用的图形类,这些图形类都实现了 Shape 接口:
注意,各图形类都是抽象类型的。在不同图形类中有 Double 和 Float 两个实现类,这两个实现类以不同精度构建图形对象。为方便计算,在程序开发中经常使用 Double 类的实例对象绘制图形,但是如果程序中要使用成千上万个图形,则建议使用 Float 类的实例对象进行绘制,这样会节省内存空间。

【实例】绘制空心和实心的集合图形。在窗体的实现类中创建图形类的对象,然后使用 Graphics2D 类绘制和填充这些图形。
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;

public class DrawFrame extends JFrame {
    public DrawFrame() {
        setTitle("绘图实例 2");                // 设置窗体标题
        setSize(300, 200);                    // 设置窗体大小
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  // 设置窗体关闭模式
        add(new CanvasPanel());              // 设置窗体面板为绘图面板对象
    }

    class CanvasPanel extends JPanel {       // 绘图面板
        public void paint(Graphics g) {
            Graphics2D g2 = (Graphics2D) g;
            Shape[] shapes = new Shape[4];   // 声明图形数组

            shapes[0] = new Ellipse2D.Double(5, 5, 100, 100);      // 创建圆形对象
            shapes[1] = new Rectangle2D.Double(110, 5, 100, 100);  // 创建矩形对象
            shapes[2] = new Rectangle2D.Double(15, 15, 80, 80);    // 创建矩形对象
            shapes[3] = new Ellipse2D.Double(120, 15, 80, 80);     // 创建圆形对象

            for (Shape shape : shapes) {                           // 遍历图形数组
                Rectangle2D bounds = shape.getBounds2D();          // 获取图形边界
                if (bounds.getWidth() == 80) {
                    g2.fill(shape);                                // 填充图形
                } else {
                    g2.draw(shape);                                // 绘制图形
                }
            }
        }
    }

    public static void main(String[] args) {
        new DrawFrame().setVisible(true);
    }
}
运行结果如下图所示:

相关文章