Swing中使用Font Awesome

22

是否可以在Swing应用程序中使用Font Awesome图标库?如果可以,如何将其图标应用于Swing组件(如JButton或JLabel)?我之前曾在我的Primefaces应用程序中使用过Font Awesome。


如果您可以合法地将字体与应用程序一起分发,Java 很可能可以加载它并在可用字体中注册它。然后,调整 UIManager 或 PLAF 实际上使用该字体来为按钮、标签或其他内容进行调整。 - Andrew Thompson
可能是设置Swing程序的默认字体如何导入字体?的重复问题。 - Andrew Thompson
2个回答

31

我会说 “是的”...

图片描述

  • Font Awesome 下载 zip 包
  • 解压缩
  • fontawesome-webfont.ttf 文件复制到您的项目中(在下面的示例中,我将其用作嵌入式资源)
  • 使用 Cheeatsheet,将您要使用的图标复制并粘贴到您的代码中
  • 加载字体并显示...

例如...

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.FontFormatException;
import java.awt.GridBagLayout;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class TestFontAwsome {

    public static void main(String[] args) {
        new TestFontAwsome();
    }

    public TestFontAwsome() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                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("?");
                    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();
                }
            }
        });
    }

}

您也可以直接使用Unicode,例如,上面示例中的符号列为,可以用作...

 JLabel label = new JLabel("\uf0c0");

1
@AndrewThompson 是的,我按照网页上的说明操作,它说要复制显示的字符,然后直接使用 Unicode 添加。 - MadProgrammer
你的示例对我有用,但是我在我的Action实现中使用了Action.SMALL_ICON和Action.LARGE_ICON_KEY来为工具栏和菜单中的操作添加图标,这需要一个图标而不是字体,那么我该如何适应呢? - Paul Taylor
@PaulTaylor Action 不支持设置 Font。"一种"解决方案是从您想要显示的文本生成自己的图像。 - MadProgrammer
感谢,已完成。https://dev59.com/imJOtIgBPY-HTNNj05_a - Paul Taylor

15

请访问http://jiconfont.github.io/,尝试使用jIconFont(Swing或JavaFX)。

示例:

Icon icon = IconFontSwing.buildIcon(FontAwesome.SMILE_O, 40, new Color(0, 150, 0));

JLabel label = new JLabel(icon);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接