繁体   English   中英

如何创建不同颜色的文本

[英]How do I create text with different colors

我目前使用此行:

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM