I downloaded the Font "Retro Gaming" (https://www.dafont.com/retro-gaming.font) to use it on my Java project. This project needs to run on every machine I run it. My question is: How or where can I put the font so that all computers (even without having it installed) can use it? I thought gradle could be a nice solution but I found nothing about it on the internet.
The example of code is:
public PlayerOneLabel() {
this.setText("PLAYER 1");
this.setForeground(Color.white);
this.setFont(new Font("Retro Gaming", Font.BOLD, CenterOnDefaultScreen.center().height*2/100));
}
This obviously run only on the PCs with the font already installed.
CodePudding user response:
Save the font file wherever you like...place it with the rest of your game files or place it in a resource folder. It doesn't need to go somewhere special if it's just for your game. You can load the font when you need it by using the following method:
/**
* Loads a Font file and returns it as a Font Object. This method does try to
* utilize the proper Font Type Resource (TrueType or Type1) but will default
* to TrueType if the resource type can not be established.
*
* @param fontFilePath (String) Full path and file name of the font to load.<br>
*
* @param fontStyle (Integer) The Font Style to use for the loaded font, for
* example:<pre>
*
* Font.PLAIN
* Font.BOLD
* Font.ITALIC
* Font.BOLDITALIC</pre>
*
* @param fontSize (Integer) The desired size of font.<br>
*
* @return (Font) A Font Object
*/
public Font loadFont(String fontFilePath, int fontStyle, int fontSize) {
Font font = null;
int fontTypeResource = Font.TRUETYPE_FONT;
if ((fontFilePath == null || fontFilePath.isEmpty()) || fontSize < 1) {
throw new IllegalArgumentException("loadFont() Method Error! Arguments "
"passed to this method must contain a file path OR a numerical "
"value other than 0!" System.lineSeparator());
}
String fileExt = (fontFilePath.contains(".") ? fontFilePath.substring(fontFilePath.lastIndexOf(".") 1) : "");
if (fontFilePath.isEmpty()) {
throw new IllegalArgumentException("loadFont() Method Error! An illegal "
"font file has been passed to this method (no file name "
"extension)!" System.lineSeparator());
}
switch (fileExt.toLowerCase()) {
case "fot":
case "t2":
case "otf":
case "ttf":
fontTypeResource = Font.TRUETYPE_FONT;
break;
// PostScript/Adobe
case "lwfn":
case "pfa":
case "pfb":
case "pdm":
fontTypeResource = Font.TYPE1_FONT;
break;
default:
fontTypeResource = Font.TRUETYPE_FONT;
}
try {
font = Font.createFont(fontTypeResource, new FileInputStream(
new File(fontFilePath))).deriveFont(fontStyle, fontSize);
}
catch (FileNotFoundException ex) {
Logger.getLogger("loadFont()").log(Level.SEVERE, null, ex);
}
catch (FontFormatException | IOException ex) {
Logger.getLogger("loadFont()").log(Level.SEVERE, null, ex);
}
return font;
}
And how you might use it:
JLabel jLabel_1 = new JLabel("This is my Label Caption");
/* Assumes the .ttf file in within the application's project
directory. Use a getResource() mechanism when loading from
a resource directory. */
Font gameFont = loadFont("Retro Gaming.ttf", Font.BOLD, 18);
jLabel_1.setFont(gameFont);