gpt4 book ai didi

java - 如何在java中添加对特殊unicode字符的支持?

转载 作者:行者123 更新时间:2023-11-30 03:13:52 24 4
gpt4 key购买 nike

我需要使用graphics2d绘制一个特殊字符,但有些字符不可用。例如,字符 ➿ 被渲染成一个盒子:

这是我的代码:

private void drawIcon(Graphics2D g2d) {
g2d.setColor(iconColor);
g2d.setFont(iconFont);
FontMetrics fm = g2d.getFontMetrics();
Rectangle2D r = fm.getStringBounds(icon, g2d);
int x = (int) ((getSize().getWidth() - (int) r.getWidth()) / 2);
int y = (int) ((getSize().getHeight() - (int) r.getHeight()) / 2 + fm.getAscent());
System.out.println(x + " " + y);
System.out.println(icon);
g2d.drawString(icon, x, y);
}

例如,icon 是字符串“\u27BF”,应显示为“➿”。

如何在代码中添加对此角色的支持?

最佳答案

寻找包含您的角色的可自由再分发(例如开源)的 TrueType 字体。假设字体许可证允许,您可以采用包含您的字符的现有字体,并将其子集化以仅包含您需要的字符 - 使用例如Font Optimizer 。或者,您可以使用字体设计工具创建仅包含此字符的自己的字体(例如 FontForge )。

然后您可以将字体作为资源嵌入到您的 JAR 中,并像这样加载它:

InputStream inp = getClass().getResourceAsStream("/com/example/myfont.ttf");
Font font = Font.createFont(Font.TRUETYPE_FONT, inp).deriveFont(18f);
g2d.setFont(font);

deriveFont()调用是因为默认情况下加载的字体大小很小(1 磅),因此将其大小调整为 18 磅。

当然,您应该加载一次(例如在构造函数或静态初始化程序中),而不是每次要绘制时都加载它,然后将其存储在一个字段中以供绘制例程使用。

这样,无论用户安装了什么字体,您的角色都应该在所有平台上可见,而且在所有平台上看起来也应该相同(或非常相似)。

关于java - 如何在java中添加对特殊unicode字符的支持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33069306/

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