Как я могу использовать собственный шрифт в Java?
Я написал программу на Java, которая использует специальный шрифт, который по умолчанию не существует в любой операционной системе.
Возможно ли в Java добавить этот специальный шрифт в операционную систему? Например, в Windows, чтобы скопировать этот шрифт в специальную папку Fonts.
Если возможно, как?
Ответы
Ответ 1
Если вы включаете в свой файл файл шрифта (otf, ttf и т.д.), вы можете использовать шрифт в своем приложении с помощью метода, описанного здесь:
Oracle Java SE 6: java.awt.Font
В Oracle есть учебник, который показывает этот пример:
try {
GraphicsEnvironment ge =
GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, new File("A.ttf")));
} catch (IOException|FontFormatException e) {
//Handle exception
}
Я бы, вероятно, обернул это в какой-то загрузчик ресурсов, хотя бы не перезагружать файл из пакета каждый раз, когда вы хотите его использовать.
Ответ, более тесно связанный с вашим первоначальным вопросом, - это установить шрифт как часть процесса установки вашего приложения. Этот процесс будет зависеть от выбранного вами способа установки. Если это не настольное приложение, вам нужно будет изучить предоставленные ссылки.
Ответ 2
Из учебника Java вам нужно создать новый шрифт и зарегистрировать его в графической среде:
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, new File("A.ttf")));
После выполнения этого шага шрифт доступен при вызовах getAvailableFontFamilyNames()
и может использоваться в конструкторах шрифтов.
Ответ 3
Вот как я это сделал!
//create the font
try {
//create the font to use. Specify the size!
Font customFont = Font.createFont(Font.TRUETYPE_FONT, new File("Fonts\\custom_font.ttf")).deriveFont(12f);
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
//register the font
ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, new File("Fonts\\custom_font.ttf")));
} catch (IOException e) {
e.printStackTrace();
} catch(FontFormatException e) {
e.printStackTrace();
}
//use the font
yourSwingComponent.setFont(customFont);
Ответ 4
Если вы хотите использовать шрифт для рисования с помощью graphics2d или аналогичного, это работает:
InputStream stream = ClassLoader.getSystemClassLoader().getResourceAsStream("roboto-bold.ttf")
Font font = Font.createFont(Font.TRUETYPE_FONT, stream).deriveFont(48f)
Ответ 5
Вы можете загрузить шрифт из File или InputStream. Затем он может быть передан в метод Component.setFont() (или аналогичный) для использования.