Is it possible to use Font Awesome with swing applications? If possible then how to use its icons with swing components (JButton or JLabel). I've used Font Awesome earlier with my Primefaces application.
Asked
Active
Viewed 1.8k times
20
-
If you can legally distribute the font with the app., Java can most likely load it and register it in the available fonts. Then it is a matter of adjusting the `UIManager` or PLAF to actually *use* that font for buttons, labels or whatever.. – Andrew Thompson Jun 12 '14 at 06:00
-
Possible duplicate of [Setting the Default Font of Swing Program](http://stackoverflow.com/q/7434845/418556) or [How do you import a font?](http://stackoverflow.com/q/8364787/418556) – Andrew Thompson Jun 12 '14 at 06:05
2 Answers
30
I would say "yes"...
- Download the zip package from Font Awesome
- Uncompress it
- Copy the
fontawesome-webfont.ttffile to your project (in the below example, I used it as an embedded resource) - Using the Cheeatsheet, copy and past the icon you want to use into your code
- Load the font and display...
For example...
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();
}
}
});
}
}
You can also use the unicode directly, for example, the symbol in the above example is listed as  which could be used as...
JLabel label = new JLabel("\uf0c0");
MadProgrammer
- 336,120
- 22
- 219
- 344
-
1@AndrewThompson Yeah, I was following the instructions on the web page which said to copy the displayed character, added using the unicode directly – MadProgrammer Jun 12 '14 at 06:12
15
Try jIconFont (Swing or JavaFX) at http://jiconfont.github.io/
Example:
Icon icon = IconFontSwing.buildIcon(FontAwesome.SMILE_O, 40, new Color(0, 150, 0));
JLabel label = new JLabel(icon);
Carlos Eduardo
- 610
- 5
- 7