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

Добавление шрифтов в приложение Swing и включение в пакет

Мне нужно использовать пользовательские шрифты (ttf) в приложении Java Swing. Как добавить их в свой пакет и использовать их?

В то время как я просто устанавливаю их в Windows, а затем я их использую, но я не хочу, чтобы использование приложения было настолько сложным, что не очень удобно говорить пользователю об установке шрифтов перед использованием мое приложение.

4b9b3361

Ответ 1

Вы можете загрузить их через InputStream:

InputStream is = MyClass.class.getResourceAsStream("TestFont.ttf");
Font font = Font.createFont(Font.TRUETYPE_FONT, is);

Этот загруженный шрифт не имеет предопределенных настроек шрифта, поэтому вам нужно будет:

Font sizedFont = font.deriveFont(12f);
myLabel.setFont(sizedFont);

См:

Физические и логические шрифты

Ответ 2

Как сказал Реймеус, вы можете использовать InputStream. Вы также можете использовать File:

File font_file = new File("TestFont.ttf");
Font font = Font.createFont(Font.TRUETYPE_FONT, font_file);

В обоих случаях вы помещаете файлы шрифтов в корневую директорию вашего проекта или в какой-либо подкаталог. Корневой каталог, вероятно, должен быть каталогом, из которого запускается ваша программа. Например, если у вас есть структура каталогов, например:

My_Program
|
|-Fonts
| |-TestFont.ttf
|-bin
  |-prog.class

вы запустите свою программу из каталога My_Program с помощью java bin/prog. Затем в вашем коде путь и имя файла для перехода к InputStream или File будут "Fonts/TestFont.ttf".

Ответ 3

Попробуйте следующее:

@Override
public Font getFont() {
    try {
        InputStream is = GUI.class.getResourceAsStream("TestFont.ttf");
        Font font = Font.createFont(Font.TRUETYPE_FONT, is);
        return font;
    } catch (FontFormatException | IOException ex) {
        Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
        return super.getFont();
    }
}