Java 文本未显示正确的字体和摆动

Java 文本未显示正确的字体和摆动,java,swing,fonts,font-awesome,Java,Swing,Fonts,Font Awesome,我试着效仿这个例子 每件事都很好,但当我试图添加一些字体显示不正确的文本时,它会显示如下内容: 我的代码 .... try (InputStream is = TestFontAwsome.class.getResourceAsStream("fontawesome-webfont.ttf")) { Font font = Font.createFont(Font.TRUETYPE_FONT, is); font = font.deriveFont(Font.PLAIN, 24f

我试着效仿这个例子

每件事都很好,但当我试图添加一些字体显示不正确的文本时,它会显示如下内容:

我的代码

....
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();
}
....
结果

我已经安装了字体:

你知道这个问题吗

JLabel label = new JLabel("\uf0c0 font not correct");
JLabel
font设置为font-Awesome,JLabel中没有ascii文本的标志符号。顺便说一句,没有一种方法可以在一个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
自定义绘制组件,并根据需要设置字体

谢谢@copeg,这是关于JLabel和JButton?的,我不能正确使用两个标签?
和JButton
你可以尝试通过跳过
paintComponent
并根据需要设置字体来进行自定义绘制。按钮还有两种其他策略。1) 按钮也支持HTML(但当按钮被禁用时,如果文本不改变颜色,则不能正确显示)。2)动态地将FontAwesome图示符转换为图像,并将图像用作按钮的图标。下面是一个(稍微复杂)的例子。谢谢@AndrewThompson的回答:)从技术上讲,这不是一个答案,只是一个评论。但不客气。:)