绘制文本

Java 绘图类也可以用来绘制文本内容,且可以在绘制前设置字体的样式、大小等。本节将讲解如何绘制文本和设置文本的字体。

设置字体

Java 使用 Font 类封装了字体的大小、样式等属性,该类在 java.awt 包中被定义,其构造方法可以指定字体的名称、大小和样式 3 个属性。语法如下:

     Font(String name, int style, int size)
  • name:字体的名称。

  • style:字体的样式。

  • size:字体的大小。

其中,字体样式可以使用 Font 类的 PLAIN、BOLD 和 ITALIC 常量,效果如图19.9所示。

image 2024 03 06 10 24 17 632
Figure 1. 图19.9 字体样式

设置绘图类的字体可以使用绘图类的 setFont() 方法。设置字体以后在图形上下文中绘制的所有文字都使用该字体,除非再次设置其他字体。语法如下:

     setFont(Font font)

其中,参数 font 是 Font 类的字体对象。

显示文字

Graphics2D 类提供了 drawString() 方法,该方法可用于实现图形上下文的文本绘制,从而实现在图片上显示文字的功能。语法格式有如下两种:

     drawString(String str, int x, int y)
     drawString(String str, float x, float y)
  • str:要绘制的文本字符串。

  • x:绘制字符串的水平起始位置。

  • y:绘制字符串的垂直起始位置。

这两个方法唯一不同的就是x和y的参数类型不同。

【例19.3】绘制文字钟表(实例位置:资源包\TM\sl\19\3)

绘制一个矩形图,在矩形图的中间显示文本,文本的内容是当前时间。

import java.awt.*;
import java.awt.geom.Rectangle2D;
import java.util.Date;
import javax.swing.*;

public class DrawString extends JFrame {

	public DrawString() {
		setSize(230, 140); // 设置窗体大小
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗体关闭模式
		add(new CanvasPanel()); // 设置窗体面板为绘图面板对象
		setTitle("绘图文本"); // 设置窗体标题
	}

	class CanvasPanel extends JPanel {
		public void paint(Graphics g) {
			Graphics2D g2 = (Graphics2D) g;
			Rectangle2D rect = new Rectangle2D.Double(10, 10, 200, 80);
			Font font = new Font("宋体", Font.BOLD, 16);
			Date date = new Date();
			g2.setColor(Color.CYAN); // 设置当前绘图颜色
			g2.fill(rect); // 填充矩形
			g2.setColor(Color.BLUE); // 设置当前绘图颜色
			g2.setFont(font); // 设置字体
			g2.drawString("现在时间是", 20, 30); // 绘制文本
			g2.drawString(String.format("%tr", date), 50, 60); // 绘制时间文本
		}
	}

	public static void main(String[] args) {
		new DrawString().setVisible(true);
	}
}

运行结果如图19.10所示。

image 2024 03 06 10 30 00 810
Figure 2. 图19.10 在窗体中绘制文本

编程训练(答案位置:资源包\TM\sl\19\编程训练)

【训练5】模拟公章 公章是指机关、团体、企事业单位使用的印章。公章的印文自左而右环行,使用简化的宋体字。使用AWT的相关技术,在窗体中绘制一个公章,效果如图19.11所示。

【训练6】水印文字 网络上的图文资源丰富,为了维护正版,各个网站采用了为这些图文资源加水印文字特效的方法。使用AWT的相关技术,为图片加上“盗版必究”的水印效果,如图19.12所示。

image 2024 03 06 10 30 51 756
Figure 3. 图19.11 公章效果
image 2024 03 06 10 31 22 203
Figure 4. 图19.12 水印效果