Я пытаюсь создать панель Swing, элементы которой имеют размер шрифта, отличный от остальной части приложения Swing. Изначально использование setFont
для пары компонентов не создавало проблем. Теперь у меня есть несколько компонентов (и все их подкомпоненты), поэтому это решение нецелесообразно.
Я искал об изменении свойств пользовательского интерфейса по умолчанию для компонентов Swing. Я обнаружил, что в основном используется UIManager, который изменяет свойства глобально. Это не работает для меня, потому что я хочу сохранить текущие настройки шрифта для всех остальных панелей.
На данный момент (и так как я не люблю публиковать сообщения без предварительной проверки чего-либо), у меня есть такой алгоритм:
public static void fixFont(Container c) {
c.setFont(c.getFont().deriveFont(10.0f));
Component[] comp = c.getComponents();
for (int i=0;i<comp.length;++i) {
if (comp[i] instanceof Container) {
fixFont((Container) comp[i]);
} else {
comp[i].setFont(comp[i].getFont().deriveFont(10.0f));
}
}
}
Проблема в том, что:
- он не включает в себя определенные элементы качания, такие как граница.
- Я должен вызывать эту функцию при динамическом добавлении других компонентов
Вопрос: Есть ли другой способ изменить свойства шрифта панели Swing и всех ее компонентов, элементов и т. Д. (Т. Е. Все на панели)?
Спасибо за ваши идеи