How do you import a font?
Solution 1
'Airacobra Condensed' font available from Download Free Fonts.
import java.awt.*;
import javax.swing.*;
import java.net.URL;
class LoadFont {
public static void main(String[] args) throws Exception {
// This font is < 35Kb.
URL fontUrl = new URL("http://www.webpagepublicity.com/" +
"free-fonts/a/Airacobra%20Condensed.ttf");
Font font = Font.createFont(Font.TRUETYPE_FONT, fontUrl.openStream());
GraphicsEnvironment ge =
GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(font);
JList fonts = new JList( ge.getAvailableFontFamilyNames() );
JOptionPane.showMessageDialog(null, new JScrollPane(fonts));
}
}
OK, that was fun, but what does this font actually look like?
import java.awt.*;
import javax.swing.*;
import java.net.URL;
class DisplayFont {
public static void main(String[] args) throws Exception {
URL fontUrl = new URL("http://www.webpagepublicity.com/" +
"free-fonts/a/Airacobra%20Condensed.ttf");
Font font = Font.createFont(Font.TRUETYPE_FONT, fontUrl.openStream());
font = font.deriveFont(Font.PLAIN,20);
GraphicsEnvironment ge =
GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(font);
JLabel l = new JLabel(
"The quick brown fox jumps over the lazy dog. 0123456789");
l.setFont(font);
JOptionPane.showMessageDialog(null, l);
}
}
Solution 2
You can use GraphicsEnvironment.registerFont
With this you can load a font from a .ttf file:
private static final Font SERIF_FONT = new Font("serif", Font.PLAIN, 24);
private static Font getFont(String name) {
Font font = null;
if (name == null) {
return SERIF_FONT;
}
try {
// load from a cache map, if exists
if (fonts != null && (font = fonts.get(name)) != null) {
return font;
}
String fName = Params.get().getFontPath() + name;
File fontFile = new File(fName);
font = Font.createFont(Font.TRUETYPE_FONT, fontFile);
GraphicsEnvironment ge = GraphicsEnvironment
.getLocalGraphicsEnvironment();
ge.registerFont(font);
fonts.put(name, font);
} catch (Exception ex) {
log.info(name + " not loaded. Using serif font.");
font = SERIF_FONT;
}
return font;
}
Solution 3
I have solved my own problem. I have done
URL fontUrl = new URL("file:///F:/Computer_Science/TexasLED.ttf");
That points to the font and works for me!
ComputerLocus
I enjoy helping people out as much as possible. I have struggled before with things and have gotten help. I want to pass on the knowledge I have been given to others.
Updated on October 04, 2020Comments
-
ComputerLocus over 3 years
I'm wondering how you would go about importing a font.
I'm trying to use a custom downloaded font but since most computers that would go to run this would not have this font as it's not a default font. How would I go about making the font work even if they don't have the font?
I'm using it for a gameover screen and need to display a score with it and want the score text to be the same font. This is the image,
In case it matters the font name on my computer is
Terminal
Edit: I'm assuming it would have to have the font in the directory of the java file and there would be some way of using that but I'm not sure how. Or is there a better way?
Edit2: I have found a nice tutorial on how to do it but need some help on how I go about using this... click me for link
Edit3:
URL fontUrl = new URL("http://www.webpagepublicity.com/" + "free-fonts/a/Airacobra%20Condensed.ttf"); Font font = Font.createFont(Font.TRUETYPE_FONT, fontUrl.openStream()); GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); ge.registerFont(font); g.setFont(font);
Error Message
File: F:\Computer Science\draw.java [line: 252] Error: F:\Computer Science\draw.java:252: font is not public in java.awt.Component; cannot be accessed from outside package
Here is what I'm trying:
URL fontUrl = new URL("http://img.dafont.com/dl/?f=badaboom_bb"); Font font = Font.createFont(Font.TRUETYPE_FONT, fontUrl.openStream()); GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); ge.registerFont(font); g.setFont(font);
Edit4:
File fontfile = new File("TexasLED.ttf"); File.toURI(fontfile).toURL(fontfile); URL fontUrl = new URL("fontfile");
Error
Error: F:\Computer Science\draw.java:250: toURI() in java.io.File cannot be applied to (java.io.File)
-
ComputerLocus over 12 yearsI tried using this:
URL fontUrl = new URL("http://www.webpagepublicity.com/" + "free-fonts/a/Airacobra%20Condensed.ttf"); Font font = Font.createFont(Font.TRUETYPE_FONT, fontUrl.openStream()); GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); ge.registerFont(font); }catch(Exception e) { } g.setFont(font);
I got this error:font cannot be accessed from outside package
-
ecle over 12 years@AndrewThompson It would be nice to come up with a fallback mechanism just in case the user is unable to load the font from Internet especially when the font doesn't have any good system font to substitute it.
-
Andrew Thompson over 12 years@eee (sigh) The point about loading a
Font
off the net is ..not the point, since it is not what I am suggesting. The act of hot-linking to aFont
was merely to create an SSCCE. Do you have a better way to demonstrate loading a customFont
in a code that is 'SC' (self-contained)? Personally I'd include theFont
in a Jar that is added to the run-time class-path of the app. -
Andrew Thompson over 12 years@Mr.Pallazzo BTW - sorry for hi-jacking your answer. I feel that it should be your answer that gets the 'tick'. I just turned your suggestion into an SSCCE (or 2, with pretty screen-shots).
-
Andrew Thompson over 12 years@eee ..continued after 5 min. limit. .. No fuss, no muss. OTOH the OP is insisting on a
File
based location, so some of my other comments (not necessarily on this answer) also refer to loading aFont
from aFile
. -
ecle over 12 years@AndrewThompson You point is taken... I just want to address the limitation of hot-linking a font in a non-networked environment. The best still is either to include the fonts inside a jar as resources or to get them from outside a jar (from a file directory or font file cache). It depends on font licensing as well. In my case with the current project, I am not allowed to embed licensed fonts inside a jar. So, I have to access the font files either from a special folder under the installation folder or to install them as system fonts so they can be used in the application.
-
Andrew Thompson over 12 years@eee "I just want to address the limitation of hot-linking a font in a non-networked environment." And that is a good point, thanks for high-lighting the perils. (re. Font licensing) "So, I have to access the font files either from a special folder" (shudder) That is unfortunate. Still, we gotta' do what we gotta' do. I won't begin to describe some of the licensing hoops I had to leap through in order to create a project based around 4 holy testaments. ;)
-
ylun.ca about 10 yearsThis answer seems to work for only half the fonts on that site, any ideas why? Also, are there any other sites that this method can be used with? The fonts on the site provided are, imo, ugly.
-
Andrew Thompson about 10 years@ylun.za "any ideas why?" Provide an MCVE (Minimal Complete and Verifiable Example) that fails. "..are there any other sites that this method can be used with?" It was never intended that 'real world' apps get their fonts by hot-linking to an internet site! Download the font and include it in one of the application Jars.
-
ylun.ca about 10 yearsI see. And simply try another url; one that i found did not work was the "Amiga Forever" font.
-
Andrew Thompson about 10 years@ylun.za I'm not going searching that site for the font you mention. If you want me to try it, post an MCVE, like I did.