是否有可能在 Swing
中实现这样的功能:
注意这里的 A 是部分着色的。
我知道单独使用 DefaultHighlighter
类可能是不可能的。
(显示在 JTextArea
上的文本)
是否有单独使用 Swing
或必须应用 CSS
来实现此目的的解决方案?
编辑:
如果 swing 无法做到这一点,是否有以下标签的解决方案?
最佳答案
Java 2D 可以实现类似的功能但不是 JTextArea
。所以你可以创建在框架中呈现它的代码,但我不认为你会找到一种简单的方法来向文本编辑器添加对此的支持(好吧,你总是可以在文本编辑器中 embed an image 但那可能不是你想要什么)。
[编辑] 对于卡拉 OK 播放器的文本显示,Java 2D 是可行的方法。 Java 编辑器 API 只会妨碍您。
下面是一个用渐变渲染文本的例子:
public void sayWorld(Graphics2D g2D, int x, int y, boolean shear) {
final String txt = "Hello World!";
// gradient color from blue to red
GradientPaint gp = new GradientPaint((float)x, (float)y, Color.blue,
x+100, y+20, Color.red);
g2D.setPaint(gp);
if (shear) g2D.shear(-0.5,0.0);
else g2D.shear(+0.5, 0);
g2D.drawString(txt, x, y);
FontRenderContext frc = new FontRenderContext(null,false,false);
TextLayout tl = new TextLayout(txt, font, frc);
AffineTransform textAt = new AffineTransform();
//textAt.translate(0, (float)tl.getBounds().getHeight());
textAt.translate(x,y);
//textAt.shear(-0.5,0.0);
Shape outline = tl.getOutline(textAt);
g2D.setColor(Color.yellow);
BasicStroke wideStroke = new BasicStroke(2);
g2D.setStroke(wideStroke);
g2D.draw(outline);
}
( source )
基本上,您渲染从单行歌词中获取文本布局,然后将其转换为形状(= 每个字母的轮廓)。然后,您可以将此形状用作剪辑区域来渲染渐变。
在您的情况下,您需要一个突然的渐变,其宽度是您要呈现的最长文本行的两倍。适本地移动它以获得渐变变化在您需要的文本位置。
关于java - 是否可以部分突出显示字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25647509/