Я создаю свинг-шрифт.(См. Также: Как не дать 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)