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

如何在JLabel中仅修改特定字符串的文本颜色(非全部文本)

解决方案:JLabel实现部分文本变色

当然可行!Swing的JLabel本身支持解析HTML格式的文本,这刚好能满足你想要让有效等级单独变红的需求,实现起来也很简单。

具体实现代码

你只需要把JLabel的文本内容用HTML标签包裹,针对有效等级部分用<span>标签设置红色样式就行,示例代码如下:

// 初始化JLabel
JLabel skillLabel = new JLabel();

// 假设你的基础等级和有效等级变量
int baseLevel = 20;
int effectiveLevel = 15;

// 拼接HTML格式的文本,给有效等级设置红色
skillLabel.setText(String.format("<html>Skill: %d(<span style='color:red'>%d</span>)</html>", baseLevel, effectiveLevel));

这样设置后,JLabel就会显示成Skill: 20(15),其中括号里的15会是红色的,完全符合你的需求。

替代方案(如果不想用HTML)

如果出于某些原因不想用HTML格式,也可以选择使用JTextPane组件,它支持更丰富的文本样式定制,不过需要额外设置文档和样式,相对来说比JLabel的HTML方案繁琐一些。比如:

JTextPane skillPane = new JTextPane();
skillPane.setEditable(false); // 设置为不可编辑,模拟JLabel的效果
StyledDocument doc = skillPane.getStyledDocument();

// 创建红色样式
Style redStyle = skillPane.addStyle("RedStyle", null);
StyleConstants.setForeground(redStyle, Color.RED);

try {
    // 添加基础文本
    doc.insertString(doc.getLength(), "Skill: 20(", null);
    // 添加红色的有效等级
    doc.insertString(doc.getLength(), "15", redStyle);
    // 添加结尾括号
    doc.insertString(doc.getLength(), ")", null);
} catch (BadLocationException e) {
    e.printStackTrace();
}

不过一般来说,第一种HTML的JLabel方案已经足够简洁好用,是优先推荐的实现方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:21:57