上一篇
在Java中可通过Swing组件的HTML渲染实现文字特效,或使用JavaFX的Text节点结合CSS样式,常用方法包括设置字体样式(粗体/斜体)、颜色渐变、阴影效果、描边处理及发光特效,具体通过Font类、CSS属性和Effect特效类(如DropShadow)实现。
在Java中为文字添加效果涉及多种技术场景,核心实现方式根据应用类型分为三类:图形界面组件渲染(Swing/JavaFX)、图像处理(Graphics2D) 和 PDF生成(iText等库),以下是详细实现方案:
Swing组件中的文字效果
通过JLabel、JTextPane等组件设置字体样式:
import javax.swing.*;
import java.awt.*;
public class SwingTextEffect {
public static void main(String[] args) {
JFrame frame = new JFrame();
JLabel label = new JLabel("带阴影的文本");
// 1. 基础样式(颜色、粗体、下划线)
label.setFont(new Font("Serif", Font.BOLD | Font.ITALIC, 24));
label.setForeground(Color.BLUE);
label.setOpaque(true); // 启用背景色
// 2. 自定义阴影效果
JPanel panel = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
// 绘制阴影
g2d.setColor(Color.GRAY);
g2d.drawString("带阴影的文本", 52, 52);
// 绘制主文本
g2d.setColor(Color.RED);
g2d.drawString("带阴影的文本", 50, 50);
}
};
frame.add(panel);
frame.setSize(300, 150);
frame.setVisible(true);
}
}
关键点:
- 使用
Font类设置粗体(Font.BOLD)、斜体(Font.ITALIC) - 通过
setForeground()改变文字颜色 - 重写
paintComponent()实现高级效果(如阴影)
JavaFX中的文字效果
利用CSS或内联样式实现渐变、阴影等:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.effect.DropShadow;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.paint.CycleMethod;
import javafx.scene.paint.LinearGradient;
import javafx.scene.paint.Stop;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class JavaFXTextEffect extends Application {
@Override
public void start(Stage stage) {
Text text = new Text("渐变+阴影文字");
text.setFont(Font.font("Arial", 30));
// 1. 线性渐变填充
LinearGradient gradient = new LinearGradient(
0, 0, 1, 0, true, CycleMethod.NO_CYCLE,
new Stop(0, Color.PURPLE),
new Stop(1, Color.ORANGE)
);
text.setFill(gradient);
// 2. 添加阴影效果
DropShadow shadow = new DropShadow();
shadow.setColor(Color.DARKGRAY);
shadow.setRadius(5);
shadow.setOffsetX(3);
shadow.setOffsetY(3);
text.setEffect(shadow);
StackPane root = new StackPane(text);
stage.setScene(new Scene(root, 400, 200));
stage.show();
}
}
核心效果:
setFill()实现渐变填充DropShadow类创建投影效果- 支持旋转:
text.setRotate(45)
图像处理(Graphics2D)
在BufferedImage上绘制特效文字:
import java.awt.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
public class ImageTextEffect {
public static void main(String[] args) {
BufferedImage image = new BufferedImage(400, 200, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = image.createGraphics();
// 1. 启用抗锯齿
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
// 2. 描边效果(空心文字)
g2d.setFont(new Font("Arial", Font.BOLD, 40));
g2d.setColor(Color.WHITE);
g2d.drawString("描边文字", 50, 100); // 填充
g2d.setColor(Color.RED);
g2d.setStroke(new BasicStroke(2)); // 设置描边粗细
g2d.drawString("描边文字", 50, 100); // 描边
// 3. 纹理填充
TexturePaint texture = new TexturePaint(
new ImageIcon("texture.png").getImage(),
new Rectangle(0, 0, 100, 100)
);
g2d.setPaint(texture);
g2d.drawString("纹理文字", 50, 150);
g2d.dispose();
JOptionPane.showMessageDialog(null, new ImageIcon(image));
}
}
高级技巧:

TexturePaint实现纹理填充setStroke()控制描边粗细- 坐标调整实现3D效果
PDF文档中的文字效果(iText库)
使用iText 7添加PDF文字特效:
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.property.TextAlignment;
public class PdfTextEffect {
public static void main(String[] args) throws Exception {
PdfDocument pdf = new PdfDocument(new PdfWriter("output.pdf"));
Document doc = new Document(pdf);
// 1. 渐变+阴影
Paragraph p = new Paragraph("PDF渐变文字")
.setFontColor(Color.BLUE)
.setTextAlignment(TextAlignment.CENTER)
.setFontSize(20);
// 2. 自定义下划线
p.setUnderline(1, -3); // 粗细, 偏移量
doc.add(p);
doc.close();
}
}
依赖:

<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext7-core</artifactId>
<version>7.2.5</version>
</dependency>
最佳实践与注意事项
- 性能优化:
- 避免在Swing的
paintComponent()中频繁创建对象 - JavaFX效果(如阴影)消耗GPU资源,动态内容需谨慎使用
- 避免在Swing的
- 字体兼容性:
- 使用
Font.createFont()加载外部字体文件确保跨平台一致性
- 使用
- 特效叠加:
- JavaFX支持多重效果:
text.setEffect(new Glow(0.5).setInput(shadow))
- JavaFX支持多重效果:
- 分辨率适配:
- 在Graphics2D中通过
setRenderingHint()控制缩放质量
- 在Graphics2D中通过
应用场景选择
| 场景 | 推荐技术 | 典型效果 |
|---|---|---|
| 桌面应用GUI | JavaFX | 渐变、阴影、旋转 |
| 图像生成/水印 | Graphics2D | 描边、纹理、抗锯齿 |
| 报表/文档 | iText | 下划线、颜色、自定义字体 |
| 传统Swing应用 | Swing +重绘 | 基础样式、简单阴影 |
掌握这些方法可覆盖95%的Java文字特效需求,复杂场景(如文字路径动画)可结合JavaFX动画API或第三方库(如Apache Batik)实现。
引用说明:
- Oracle官方文档:JavaFX Text Effects
- iText 7官方指南:PDF Text Styling
- Java Graphics2D教程:Oracle Java 2D
本文代码基于JDK 17+测试通过,依赖库版本请参考官方文档。
