Spec-Zone .ru
спецификации, руководства, описания, API
След: 2-D Графика
Урок: Работа с текстовыми API
Физические и Логические Шрифты
Домашняя страница > 2-D Графика > Работа с текстовыми API

Физические и Логические Шрифты

Есть два типа шрифтов: физические шрифты и логические шрифты. Физические шрифты являются фактическими библиотеками шрифтов, состоящими из, например, TrueType или шрифты Типа 1 PostScript. Физическими шрифтами может быть Время, Helvetica, Курьер, или любое число других шрифтов, включая международные шрифты. Логические шрифты являются следующими пятью семействами шрифтов: Засечка, SansSerif, Моноширинный, Диалоговый, и DialogInput. Эти логические шрифты не являются фактическими библиотеками шрифтов. Вместо этого логические имена шрифтов отображаются на физические шрифты средой выполнения Java.

Этот раздел помогает Вам определить который тип шрифта использовать в Вашем приложении. Это затрагивает следующие темы:

Физические Шрифты

Физические шрифты являются фактическими библиотеками шрифтов, содержащими данные глифа и таблицы, чтобы отобразиться от символьных последовательностей до последовательностей глифа, используя технологию шрифта, таких как Тип 1 PostScript или TrueType. Чтобы получить имена всех доступных семейств шрифтов, установленных в Вашей системе, вызовите следующее:

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
String []fontFamilies = ge.getAvailableFontFamilyNames();

Пример программы FontSelector (доступный в FontSelector.java) иллюстрирует, как определить местоположение и выбрать эти шрифты.


Отметьте: Приложения не должны предположить, что любой определенный физический шрифт присутствует. Однако, логические шрифты являются безопасным выбором, потому что они всегда присутствуют. См. Логические Шрифты для получения дополнительной информации.


Отметьте:  

Если Вы не видите, что апплет работает, Вы должны установить выпуск 6 (или позже) Java Комплект разработчика SE (JDK).


Шрифты Lucidia

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

Приложения используя эти шрифты могут достигнуть того же самого взгляда везде, где эти шрифты доступны. Кроме того, эти шрифты покрывают большой спектр языков (особенно европейский и ближневосточный), таким образом, можно создать полностью многоязычные приложения для поддерживаемых языков. Однако, эти шрифты, возможно, не доступны во всем JREs. Кроме того, они в настоящий момент не покрывают полный набор символов Unicode; в частности китайский, японский, и корейский язык не поддерживаются.

Связывание Физических Шрифтов с Вашим Приложением

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

Используйте один из этих методов, чтобы создать a Font объект от существующего физического шрифта:

Font java.awt.Font.createFont(int fontFormat, InputStream in);
Font java.awt.Font.createFont(int fontFormat, File fontFile);

Создать a Font объект от шрифта TrueType, формального параметра fontFormat должна быть константа Font.TRUETYPE_FONT. Следующий пример создает a Font объект от файла шрифта TrueType A.ttf:

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

Доступ к шрифту непосредственно от файла более прост и более удобен. Однако, Вы могли бы потребовать InputStream возразите, неспособен ли Ваш код получить доступ к ресурсам файловой системы, или если шрифт упаковывается в Архиве Java (JAR) файл наряду с остальной частью приложения или апплета.

createFont метод создает новое Font объект с размером точки 1 и стиль PLAIN. Этот основной шрифт может тогда использоваться с Font.deriveFont методы, чтобы произойти новый Font объекты с переменными размерами, стилями, преобразовывают и функции шрифта. Например:

try {
     //Returned font is of pt size 1
     Font font = Font.createFont(Font.TRUETYPE_FONT, new File("A.ttf"));

     //Derive and return a 12 pt version:
     //Need to use float otherwise
     //it would be interpreted as style

     return font.deriveFont(12f);

} catch (IOException|FontFormatException e) {
     // Handle exception
}

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

Решение для этой проблемы состоит в том, чтобы зарегистрировать создаваемый шрифт в графической среде. Например:

try {
     GraphicsEnvironment ge = 
         GraphicsEnvironment.getLocalGraphicsEnvironment();
     ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, new File("A.ttf"));
} catch (IOException|FontFormatException e) {
     //Handle exception
}

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

Логические Шрифты

Java SE определяет следующие пять логических семейств шрифтов:

Эти шрифты доступны на любой платформе Java и могут считаться псевдонимами для некоторого базового шрифта, которому подразумевало свойства его имя. Шрифт Засечки является шрифтом, подобным Times New Roman, который обычно используется в печати. Шрифт Гротескового шрифта более типичен для экранного использования.

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

Кроме семейства, у шрифтов есть другие атрибуты, самый важный из которых стиль и размер. Стили являются Полужирными и Курсив.

Шрифтом значения по умолчанию, используемым Java 2-D API, являются 12 pt Диалоговых окон. Этот шрифт является типичным размером точки для того, чтобы считать текст на нормальных 72–120 дисплеях DPI. Приложение может создать экземпляр этого шрифта непосредственно, определяя следующее:

Font font = new Font("Dialog", Font.PLAIN, 12);

Преимущества и Недостатки Использования Физических и Логических Шрифтов

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

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

Логические имена шрифтов, как гарантируют, будут работать где угодно, и они включают текстовому рендерингу на, по крайней мере, языке, что операционная система узла локализуется для (часто намного больший диапазон языков). Однако, физические шрифты, используемые для того, чтобы представить текст, изменяются между различными реализациями, размещают операционные системы, и локали, таким образом, приложение не может достигнуть того же самого взгляда всюду. Кроме того, отображающиеся механизмы иногда ограничивают диапазон символов, которые могут быть представлены. Последний имел обыкновение быть большой проблемой на версиях JRE прежде 5.0: например, японский текст мог только быть представлен на японских локализованных операционных системах узла, не на других локализованных системах, даже если были установлены японские шрифты. Для приложений, используя 2-D рендеринг шрифта, эта проблема намного более редка с версией 5.0 JRE и позже, потому что отображающийся механизм теперь обычно распознает и использует шрифты для всех поддерживаемых систем письменности, если они устанавливаются.

Конфигурационные файлы шрифта

Java среда выполнения SE использует конфигурационные файлы шрифта, чтобы отобразить логические имена шрифтов на физические шрифты. Есть несколько файлов, чтобы поддерживать различные отображения в зависимости от версии операционной системы узла. Файлы располагаются в lib каталог в пределах установки JRE. Можно отредактировать или создать свои собственные конфигурационные файлы шрифта, чтобы скорректировать отображения к Вашей определенной системной установке. См. Конфигурационные файлы Шрифта для получения дополнительной информации.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: текстовые Понятия Расположения
Следующая страница: Измерение текста