Загрузка пользовательских шрифтов во время выполнения для использования с JTextPane

Спасибо за ваше время. Мой вопрос касается отображения разных шрифтов в одном JTextPane. Мой клиент хочет просмотреть слово на двух разных языках в одном поле. Они явно указали, что хотят, чтобы разные языки (а именно амхарский, арабский, коптский и иврит) отображались с разными шрифтами. Это явно нестандартные шрифты, и я не могу полагаться на то, что у пользователя в ОС установлены необходимые шрифты.

Из своего исследования я обнаружил, что могу загрузить файл шрифта во время выполнения и соответствующим образом установить шрифт JTextPane, что нормально, если я просто хочу использовать один шрифт, а не два. Я также читал о добавлении шрифтов в каталог шрифтов ОС или каталог шрифтов JRE, описанный здесь.

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

Еще раз спасибо за ваше время, и я с нетерпением жду любых ответов с яркими идеями!


person Hoopla    schedule 17.10.2011    source источник


Ответы (1)


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

JTextPane может использовать несколько шрифтов.

Ознакомьтесь с разделом руководства по Swing, посвященным функциям текстовых компонентов. пример игры с атрибутами текста в текстовой области.

Редактировать:

Однако для использования нескольких шрифтов единственный способ, который я разработал для установки шрифта, - это создать MutableAttributeSet и установить атрибут "FontFamily" (строка) для желаемого имени шрифта, а затем назначить набор атрибутов тексту с помощью StyledDocument.setCharacterAttributes

Чтение API для метода createFont() похоже, что вы должны иметь возможность использовать:

GraphicsEnvironment.registerFont(Font)
person camickr    schedule 18.10.2011
comment
Привет Camickr, спасибо за ваш ответ! Вы совершенно правы, вы можете использовать несколько шрифтов с JTextPane. Однако мне удалось найти только код для использования шрифтов, уже установленных в ОС, где я хочу иметь возможность загружать пользовательские шрифты во время выполнения (т. Е. Шрифты - это ресурсы в моем банке). Если бы можно было указать путь шрифта JVM к другой папке или зарегистрировать другой каталог в качестве папки шрифтов, это было бы здорово. - person Hoopla; 19.10.2011
comment
Вы заявили, что можете загрузить файл шрифта во время выполнения и установить шрифт JTextPane. Вот почему я выделил это утверждение в своем ответе. Итак, если вы знаете, как загрузить один шрифт, почему вы не можете загрузить два шрифта? - person camickr; 19.10.2011
comment
Честная оценка. Что ж, способ, которым я успешно использовал один пользовательский шрифт, заключается в чтении файла ttf с помощью мехтода FontFont.createFont, а затем установке свойства шрифта JTextPane, JTextPane.setFont. Однако для использования нескольких шрифтов единственный способ, который я разработал для установки шрифта, - это создать MutableAttributeSet и установить атрибут FontFamily (строка) для желаемого имени шрифта, а затем назначить набор атрибутов тексту с помощью метода StyledDocument.setCharacterAttributes , как показано здесь - person Hoopla; 19.10.2011
comment
... это работает нормально, пока шрифт, на который вы ссылаетесь, установлен в ОС. Итак, вы видите, моя проблема в том, что я хочу использовать шрифты, которые не установлены в ОС. Спасибо - person Hoopla; 19.10.2011
comment
ЯХТЗИ! Camickr, ты мертвая легенда! Не знаю, как я не наткнулся на этот метод в своих путешествиях, но спасибо! В качестве неожиданного бонуса загрузка шрифтов таким образом позволяет использовать их со всеми компонентами Swing, совместимыми с HTML. - person Hoopla; 20.10.2011