java - 文本未显示正确的 FontAwesome 和 Swing

标签 java swing fonts font-awesome

我试图遵循这个例子Font Awesome with Swing

一切工作正常,但是当我尝试添加一些文本时,字体显示不正确,它向我显示如下内容:

我的代码

....
try (InputStream is = TestFontAwsome.class.getResourceAsStream("fontawesome-webfont.ttf")) {
    Font font = Font.createFont(Font.TRUETYPE_FONT, is);
    font = font.deriveFont(Font.PLAIN, 24f);

    JLabel label = new JLabel("\uf0c0 font not correct");
    label.setFont(font);
    label.setForeground(Color.red);

    label.setFont(font);

    JFrame frame = new JFrame("Testing");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLayout(new GridBagLayout());
    frame.add(label);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
} catch (IOException | FontFormatException exp) {
    exp.printStackTrace();
}
....

结果

Error when set font

我已经安装了字体:

Install the font

对这个问题有什么想法吗?

最佳答案

JLabel label = new JLabel("\uf0c0 font not correct");

JLabel 字体设置为 Font Awesome,它没有 JLabel 中提供的 ascii 文本的字形。 AFAIK 没有办法在单个 JLabel 中混合字体 - 您可以使用某种形式的 html 来做到这一点,但更简单的解决方案可能是仅使用两个具有不同字体的 JLabel。

JLabel l1 = new JLabel("\uf0c0");
JLabel l2 = new JLabel("This is ascii text");
l1.setFont(fontAwesome);
Box mix = Box.createHorizontalBox();
mix.add(l1); mix.add(l2);
myContainer.add(mix);

您也可以使用paintComponent自定义绘制组件,并根据需要设置字体。

关于java - 文本未显示正确的 FontAwesome 和 Swing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40554677/

相关文章:

java - 如何在 OS X 上的 JavaFX 中显示表情符号?

c# - 如何在 DateTimePicker 中设置字体大小

java - 为什么扩展了thread的内部类的执行线程是主线程呢?

Java DecimalFormat 省略小数点前的前导零

java - 从 fresco 获取 bitmapdrawable

java - 图像未在 JPanel 内显示

java - JMenuBar抽象按钮工厂不添加按钮

swing - ListView 上的 Scala Swing 弹出菜单

css - 在 css 中嵌入字体 Fonte_Nexa-TTF 和 Fonte_Nexa

java - 从枚举创建单例 bean