文本未显示正确的FontAwesome和Swing

时间:2016-11-11 19:12:37

标签: 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

关于这个问题的任何想法?

1 个答案:

答案 0 :(得分:1)

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自定义绘制组件,根据需要设置字体。