Spec-Zone .ru
спецификации, руководства, описания, API
|
Есть два типа шрифтов: физические шрифты и логические шрифты. Физические шрифты являются фактическими библиотеками шрифтов, состоящими из, например, TrueType или шрифты Типа 1 PostScript. Физическими шрифтами может быть Время, Helvetica, Курьер, или любое число других шрифтов, включая международные шрифты. Логические шрифты являются следующими пятью семействами шрифтов: Засечка, SansSerif, Моноширинный, Диалоговый, и DialogInput. Эти логические шрифты не являются фактическими библиотеками шрифтов. Вместо этого логические имена шрифтов отображаются на физические шрифты средой выполнения Java.
Этот раздел помогает Вам определить который тип шрифта использовать в Вашем приложении. Это затрагивает следующие темы:
Физические шрифты являются фактическими библиотеками шрифтов, содержащими данные глифа и таблицы, чтобы отобразиться от символьных последовательностей до последовательностей глифа, используя технологию шрифта, таких как Тип 1 PostScript или TrueType. Чтобы получить имена всех доступных семейств шрифтов, установленных в Вашей системе, вызовите следующее:
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); String []fontFamilies = ge.getAvailableFontFamilyNames();
Пример программы FontSelector (доступный в FontSelector.java
) иллюстрирует, как определить местоположение и выбрать эти шрифты.
Если Вы не видите, что апплет работает, Вы должны установить
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 определяет следующие пять логических семейств шрифтов:
Dialog
DialogInput
Monospaced
Serif
SansSerif
Эти шрифты доступны на любой платформе 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. Можно отредактировать или создать свои собственные конфигурационные файлы шрифта, чтобы скорректировать отображения к Вашей определенной системной установке. См.