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