gpt4 book ai didi

Java JLabel HTML 在字体与系统字体冲突时显示乱码

转载 作者:太空狗 更新时间:2023-10-29 16:35:20 24 4
gpt4 key购买 nike

已更新 - 问题现在以一种丑陋的方式解决了 - 但必须有一个正确的方法来做到这一点?

当字体名称与系统上已安装的字体名称冲突时,我在使用 JLabel 中的 HTML 以自定义字体呈现文本时遇到问题。

系统字体采用不同的格式(otf 与 ttf),因此文本出现乱码也就不足为奇了。

调用 GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont 返回 false 以显示字体注册失败。所以我想问题是,有没有办法不用注册就可以使用这个字体,或者有办法在注册之前重命名它?

我现在已经通过编辑 ttf 文件并修改字体名称来解决我的问题,从而使冲突极不可能发生,但我猜必须有一种正确的方法来处理这种情况。

package test;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Font;
import java.awt.FontFormatException;
import java.awt.GraphicsEnvironment;
import java.io.IOException;
import java.io.InputStream;
import javax.swing.JApplet;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

@SuppressWarnings("serial")
class MyComponent extends JPanel {
Font font; String text;
public MyComponent(Font f) {font=f;}
public void initSwing()
{
final String labelcontents = "<html><center>foo</center></html>";
System.out.println(labelcontents);
JLabel text = new JLabel(labelcontents);
text.setFont(font);
add(text,BorderLayout.CENTER);
}
}

@SuppressWarnings("serial")
public class TestApplet extends JApplet {
public void init()
{
Font mainFont = null;
InputStream is = getClass().getResourceAsStream("fonts/Exo-Bold.ttf");
try {
mainFont = Font.createFont(Font.TRUETYPE_FONT, is).deriveFont(24f);
System.out.println(mainFont.getName());
boolean registered=GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont(mainFont);
System.out.println("registered "+registered);
} catch (FontFormatException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}

final Container fframe = (JComponent)(getContentPane());
final MyComponent component = new MyComponent(mainFont);

Thread t = new Thread(new Runnable() {
public void run() { try {

SwingUtilities.invokeAndWait(new Runnable() {public void run() {
fframe.add(component);
component.initSwing();
fframe.revalidate();
fframe.repaint();
}});

} catch (Exception e) {
e.printStackTrace();
} }
});
t.start();
}
}

最佳答案

也许文本包含带有字符集等的 HTML 命令。

String text1 = "<html><body>"
+ text.replace("&", "&amp;")
.replace("<", "&lt;")
.replace(">", "&gt;");
+ "</body></html>";

关于Java JLabel HTML 在字体与系统字体冲突时显示乱码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33970413/

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