Swing названия шрифтов не совпадают? (Выбор шрифта, и я пытаюсь отобразить системный шрифт по умолчанию в JComboBox) - PullRequest
2 голосов
/ 14 мая 2011

Я создаю свинг-шрифт.(См. Также: Как не дать JComboBox перестать отвечать на запросы при использовании пользовательского ListCellRenderer )

Чтобы получить все доступные шрифты, я делаю:

GraphicsEnvironment gE = GraphicsEnvironment.getLocalGraphicsEnvironment();
Font[] fonts = gE.getAllFonts();

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

Для этого я использую статический базовый шрифт (полученный из статической базыметка (JLabel)), из которой я получаю шрифт по умолчанию.Затем во время инициализации JComboBox я вызываю

fontComboBox.setSelectedItem(new Font(baseFont.getName(),baseFont.getStyle(),1)); 
//The size is 1 in all fonts retrieved from GraphicsEnvironment.
//The combo box contains objects of the type Font.

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

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

Для меня базовый шрифт - это Dialog.Название шрифта - «Диалог».Однако имена шрифтов, извлеченных из GraphicsEnvironment for Dialog, называются «Dialog.Bold», «Dialog.Plain» и «Dialog.Italic».Поскольку созданный шрифт имеет другое имя, выпадающий список не будет выбирать нужный элемент (равно (...) не удается).

Обратите внимание, как это работает с большинством шрифтов (единственный, который я тестировал до сих пор, чтоне работает - это шрифт Dialog).

Есть ли лучшее решение, позволяющее избежать этой проблемы?Могу ли я получить правильные имена шрифтов, используя какой-то другой компонент Swing, кроме JLabel, чтобы получить базовый шрифт?Наконец, почему имена не совпадают?

РЕДАКТИРОВАТЬ: Дополнительный вопрос: Как загрузить физический шрифт логических шрифтов?(Создание средства выбора шрифтов JComboBox)

1 Ответ

4 голосов
/ 14 мая 2011

Есть некоторые шрифты "Диалог", "Моноширинный", и некоторые другие не помнят, что названия не являются релевантными шрифтами.Искусственные шрифты используются Java, но они отображаются с другим физическим шрифтом.Это сделано для того, чтобы предоставить независимые от платформы имена шрифтов.

Это означает, например, что для шрифта "Monospaced" используется какой-то реальный, зависящий от ОС шрифт с одинаковыми символами.http://download.oracle.com/javase/1.3/docs/guide/intl/addingfonts.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...