Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 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() (или аналогичный) для использования.