摆动中的图标字体:字体图标不出现在JLabel

时间:2015-05-27 19:24:50

标签: java swing fonts

我正在用java制作swing应用程序,当然还有按钮。我决定通过JLabel制作带有图标字体的scalabilty。我尝试使用带标签的Font Awesome,它工作正常:

Font font = Font.createFont(Font.TRUETYPE_FONT, int.class.getResourceAsStream("/fonts/fontawesome.ttf")).deriveFont(20f);
JFrame frame = new JFrame();
frame.setLayout(new FlowLayout(FlowLayout.TRAILING, 20, 20));
JLabel label1 = new JLabel("\uF144");
label1.setFont(font);
frame.add(label1);
JLabel label2 = new JLabel("\uF1B0");
label2.setFont(font);
frame.add(label2);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);

rendered icons: triangle in circle and paw print

所以,我去了图标字体生成器(Fontello)并选择了所需的图标。 我将生成的字体添加到我的应用程序中,更改了代码并进行了测试运行......我没有看到它们:它们只是没有出现!

我写了测试代码(我用红色边框制作了图标,看看会发生什么):

final Font[] font = {Font.createFont(Font.TRUETYPE_FONT, int.class.getResourceAsStream("/fonts/fontello.ttf"))};
JFrame frame = new JFrame();
frame.setLayout(new FlowLayout(FlowLayout.TRAILING, 20, 20));
JLabel size = new JLabel("Size: " + font[0].getSize2D());
frame.add(size);
// I have 12 icons in font
JLabel[] labels = new JLabel[12];
int j = 0;
// There are codes of those icons
for(char i = '\uE800'; i <= '\uE80B'; i++)
{
    JLabel label1 = new JLabel("" + i);
    label1.setFont(font[0]);
    label1.setBorder(new LineBorder(Color.RED, 1));
    label1.setForeground(Color.black);
    frame.add(label1);
    labels[j++] = label1;
}
frame.add(new JButton(new AbstractAction("-1")
{
    @Override
    public void actionPerformed(ActionEvent e)
    {
        font[0] = font[0].deriveFont(font[0].getSize2D() - 1);
        size.setText("Size: " + font[0].getSize2D());
        for(JLabel label: labels)
        {
            label.setFont(font[0]);
        }
    }
}));
frame.add(new JButton(new AbstractAction("+1")
{
    @Override
    public void actionPerformed(ActionEvent e)
    {
        font[0] = font[0].deriveFont(font[0].getSize2D() + 1);
        size.setText("Size: " + font[0].getSize2D());
        for(JLabel label: labels)
        {
            label.setFont(font[0]);
        }
    }
}));
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);

我看到了什么? 一些发布成功:

test run

test run

(每次运行我都会增加字体大小)

有些不是:

test run

test run

正如你所看到的那样,在8号时我无法说出会发生什么,以第9号开始 - 由于某种原因,人物根本没有画过。

WTF?这是一个摆动的错误还是有字体问题?

1 个答案:

答案 0 :(得分:2)

所以,这不是找到问题的解决方案,而是解决方法。我编写了自己的swing组件,用给定的字体绘制给定的字形:

$('.box1.box box-default.box-header with-border.box-title').text("Box 1 title");
$('.box2.box box-default.box-header with-border.box-title').text("Box 2 title");