Как я могу использовать собственный шрифт в Java? - PullRequest
41 голосов
/ 13 апреля 2011

Я написал программу на Java, в которой используется специальный шрифт, которого по умолчанию не существует ни в одной операционной системе.

Возможно ли в Java добавить этот специальный шрифт в операционную систему?Например, в Windows скопировать этот шрифт в специальную папку Fonts.

Если это возможно, то как?

Ответы [ 4 ]

45 голосов
/ 13 апреля 2011

Если вы включите файл шрифта (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
}

Я бы, вероятно, обернул это в какой-нибудь загрузчик ресурсов, чтобы не перезагружать файл из пакета каждый раз, когда вы захотите его использовать.

Ответ, более тесно связанный с вашим первоначальным вопросом, заключается в установке шрифта как части процесса установки вашего приложения. Этот процесс будет зависеть от выбранного вами способа установки. Если это не настольное приложение, вам нужно просмотреть предоставленные ссылки.

11 голосов
/ 07 июля 2013

Вот как я это сделал!

//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(customFont);
} catch (IOException e) {
    e.printStackTrace();
} catch(FontFormatException e) {
    e.printStackTrace();
}

//use the font
yourSwingComponent.setFont(customFont);
8 голосов
/ 13 апреля 2011

Из руководства по Java необходимо создать новый шрифт и зарегистрировать его в графической среде:

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, new File("A.ttf")));

После выполнения этого шага шрифт доступен в вызовахдо getAvailableFontFamilyNames() и может использоваться в конструкторах шрифтов.

5 голосов
/ 29 ноября 2016

Если вы хотите использовать шрифт для рисования с graphics2d или аналогичным, это работает:

InputStream stream = ClassLoader.getSystemClassLoader().getResourceAsStream("roboto-bold.ttf")
Font font = Font.createFont(Font.TRUETYPE_FONT, stream).deriveFont(48f)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...