You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java Swing构建的UI应用中设置字符串/文本颜色

Java Swing 非HTML实现文本着色可行方案

方案1:单颜色文本最简实现(优先选用)

如果需求是给整段展示文本设置统一颜色,不需要同一段内多色混排,直接调用Swing文本组件自带的setForeground()方法即可,覆盖JLabel、JButton、JTextField、JCheckBox等绝大多数自带文本展示的组件,性能最高、代码量最小:

// 示例:给标签设置红色文本
JLabel textLabel = new JLabel("This is my simple text");
textLabel.setForeground(Color.RED);

方案2:通用多色/多样式文本实现(适配绝大多数场景)

如果需要同一段文本内不同部分显示不同颜色、不同字体样式(比如部分字红色、部分字蓝色,混排加粗/斜体),使用JTextPane搭配StyledDocument实现,是Swing原生提供的富文本展示方案,完全不依赖HTML解析,支持细粒度样式控制,通用度远高于JTree/JTable这类特定组件的渲染器方案:

import javax.swing.*;
import javax.swing.text.*;
import java.awt.*;

public class ColorTextDemo {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            JFrame frame = new JFrame("彩色文本展示");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            
            // 初始化文本展示组件,设为不可编辑作为纯展示用
            JTextPane textPane = new JTextPane();
            textPane.setEditable(false);
            textPane.setOpaque(false); // 不需要背景的话设为透明,和JLabel视觉效果一致
            StyledDocument doc = textPane.getStyledDocument();
            
            // 定义红色文本样式,可同时设置字号、字体、加粗等属性
            SimpleAttributeSet redTextAttr = new SimpleAttributeSet();
            StyleConstants.setForeground(redTextAttr, Color.RED);
            StyleConstants.setFontSize(redTextAttr, 14);
            
            try {
                // 插入带样式的文本,可多次插入不同样式的文本实现混排
                doc.insertString(0, "This is my simple text", redTextAttr);
            } catch (BadLocationException e) {
                e.printStackTrace();
            }
            
            frame.add(textPane);
            frame.setSize(300, 200);
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        });
    }
}

方案3:自定义绘制场景实现

如果是在自绘组件上展示彩色文本,直接在paintComponent方法中通过Graphics对象设置颜色后绘制文本即可,自由度最高:

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    // 设置文本颜色
    g.setColor(Color.RED);
    g.setFont(getFont());
    // 指定坐标绘制文本
    g.drawString("This is my simple text", 10, 20);
}

方案选型参考

  • 整段单色展示:优先选方案1,代码最简单性能最好
  • 多色/多样式混排、通用文本展示:选方案2,原生支持无额外依赖
  • 完全自定义UI绘制场景:选方案3,可控性最高

内容的提问来源于stack exchange,提问作者Aditi Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 08:12:31