正文

Java图形与文本(25)

Java开发实战1200例(第II卷) 作者:李钟尉


实例025  绘制公章

实例说明

本实例演示如何使用坐标轴平移、缩放、绘制椭圆、绘制多边形和绘制文本等技术实现公章的绘制。运行程序,将在窗体上显示绘制的公章,效果如图1.25所示。

关键技术

本实例主要是通过在JPanel类的子类中,重写JComponent类的paint()方法,并在该方法中使用Graphics2D类的translate()、setColor()、scale()、drawString()、fillPolygon()和draw()等方法来实现的。

(1)使用Graphics2D类的translate()方法将坐标轴平移到指定点。

(2)使用Graphics2D类的setColor()方法设置颜色。

(3)使用Graphics2D类的scale()方法对公章中的文本进行缩放。

(4)使用Graphics2D类的drawString()方法绘制文本,该方法是从Graphics类继承的。

(5)使用Graphics2D类的fillPolygon()方法绘制公章的五星,该方法也是从Graphics类继承的。

(6)使用Graphics2D类的draw()方法绘制表示公章的圆。

设计过程

(1)新建一个项目。

(2)在项目中创建一个继承JFrame类的DrawCachetFrame窗体类。

(3)在DrawCachetFrame窗体类中,创建内部面板类DrawCachetPanel,并重写JComponent类的paint()方法,在该方法中实现公章的绘制。

(4)将内部面板类DrawCachetPanel的实例,添加到窗体类DrawCachetFrame的内容面板上,用于在窗体上显示绘制的公章,代码如下:

class DrawCachetPanel extends JPanel {  // 创建内部面板类

    public void paint(Graphics g) {  // 重写paint()方法

        Graphics2D g2 = (Graphics2D) g;  // 获得Graphics2D对象

        g2.translate(170, 100); // 平移坐标轴

        BasicStroke stroke = new BasicStroke(6);  // 创建宽度是6的笔画对象

        g2.setStroke(stroke); // 设置笔画对象

        // 绘制圆

        Ellipse2D.Float ellipse = new Ellipse2D.Float(-80, -80, 160, 160); // 创建圆对象

        Color color = new Color(255, 0, 0); // 创建颜色对象

        g2.setColor(color); // 指定颜色

        g2.draw(ellipse); // 绘制圆

        // 绘制五星

        int[] x1 = { 0, 8, 30, 16, 25, 0, -25, -16, -30, -8 };  // 多边形的横坐标

        int[] y1 = { -35, -10, -15, 5, 28, 10, 28, 5, -15, -10 };  // 多边形的纵坐标

        int n1 = 10; // 多边形的边数

        g2.fillPolygon(x1, y1, n1); // 绘制多边形

        // 绘制文本

        g2.scale(1.8, 1.8); // 放大

        Font font = new Font("宋体", Font.BOLD, 12); // 创建字体

        g2.setFont(font); // 设置字体

        g2.drawString("专 用 章", -25, 30); // 绘制文本

        int width = getWidth(); // 获得面板宽度

        int height = getHeight(); // 获得面板高度

        char[] array = " 明日科技有限公司         ".toCharArray(); // 把字符串转换为字符数组

        int len = array.length * 2; // 定义半径

        font = new Font("宋体", Font.BOLD, 10); // 创建新字体

        g2.setFont(font); // 设置字体

        double angle = 0; // 初始角度

        for (int i = 0; i < array.length; i++) { // 遍历字符串中的字符

            int x = (int) (len * Math.sin(Math.toRadians(angle + 270))); // 计算每个文字的位置

            int y = (int) (len * Math.cos(Math.toRadians(angle + 270))); // 计算每个文字的位置

            g2.drawString(array[i] + "", width / 2 + x - 168, height / 2 - y - 95); // 绘制每个字符,其中168和95是坐标平移值

            angle = angle + 360d / array.length; // 改变角度

        }

    }

}

秘笈心法

心法领悟025:正确设置绘图上下文的属性。

在进行图形和文本的绘制时,要求能够正确设置绘图上下文的属性,如文本的字体、颜色,图形线条的粗细、虚实及颜色等,正确设置的方法是在绘制每一种新样式的文本或图形之前,先对绘图上下文的属性进行设置,然后再绘制文本和图形,这样设置的绘图上下文属性才是有效的。

 


上一章目录下一章

Copyright © 读书网 www.dushu.com 2005-2020, All Rights Reserved.
鄂ICP备15019699号 鄂公网安备 42010302001612号