gpt4 book ai didi

java - 如何创建不同颜色的文本

转载 作者:行者123 更新时间:2023-12-01 12:42:05 24 4
gpt4 key购买 nike

我目前使用这条线:

font.drawString(Display.getWidth()/2 - offset, height, "Hi, Stackoverflow!", Color.yellow);

但是,这只允许我在每条消息中使用一种颜色。

然而,我想要这样的一行:

font.drawString(Display.getWidth()/2 - offset, height, BLUE TEXT HERE + "Team A score: " + score + RED TEXT HERE + " || " + YELLOW TEXT HERE + "Team B score: " + score, Color.yellow);

变量font的类型为UnicodeFont

@SuppressWarnings("unchecked")
static void setUpFonts() {
java.awt.Font awtFont = new java.awt.Font("Times New Roman", java.awt.Font.BOLD, 18);
font = new UnicodeFont(awtFont);
font.getEffects().add(new ColorEffect(java.awt.Color.white));
font.addAsciiGlyphs();
try {
font.loadGlyphs();
} catch (SlickException e) {
e.printStackTrace();
cleanUp();
}
}

如果有一个不需要多条消息的解决方案那就太好了。

最佳答案

不,没有这样的方法。

您必须将其拆分为:

g.setColor(Color.blue);
g.drawString("Hi,", 50, 50);

g.setColor(Color.red);
g.drawString("Stackoverflow!", 50 + font.getWidth("Hi, "), 50);

作为解决方法,您可以自己编写一个辅助方法,如果您更频繁地需要它,该方法可以完成所有偏移量的计算和处理。像这样的东西:

public void drawString(Graphics g, int x, int y, Object... args)
{
org.newdawn.slick.Font font = g.getFont();
int currentOffset = x;
int startOffset = x;

for (int i = 0; i < args.length / 2; i++)
{
g.setColor((Color) args[i * 2]);
g.drawString((String) (args[i * 2 + 1]), currentOffset, y);

currentOffset += font.getWidth(((String) (args[i * 2 + 1])));

if (((String) (args[i * 2 + 1])).contains("\n"))
{
currentOffset = startOffset;
}
}
}

并称其为:

drawString(g, 10, 10, "Stack", Color.red, "Overflow", Color.green, "!", Color.yellow);

关于java - 如何创建不同颜色的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25004910/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com