Я пытаюсь создать панель Swing, чьи элементы имеют другой размер шрифта, чем остальная часть приложения swing. Первоначально использование setFont
для нескольких компонентов не создавало проблем. Теперь у меня есть несколько компонентов (и все их подкомпоненты), поэтому это решение нецелесообразно.Изменить размер шрифта JPanel и всех его элементов
Я искал об изменении свойств пользовательского интерфейса по умолчанию для компонентов 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));
}
}
}
Проблема заключается в том, что:
- это не включает в себя определенные элементы поворота, такие как граница.
- Я должен вызвать эту функцию, когда я добавляю другие компоненты динамически
Вопрос: Есть еще один способ, чтобы изменить свойства шрифтов панели свинг и все его компоненты, элементы и т.д. (то есть все, что в панель) ?
Спасибо за ваши идеи
Я хочу изменить только шрифты панели и все ее элементы. Я не хочу менять шрифт других панелей. Выполнение этого с помощью UIManager изменяет шрифт для всех компонентов Swing. – YuppieNetworking
А, хорошо. Не понимал, что вам нужно. Не знаю, как (или если это возможно) решить его сейчас, когда я понимаю ваш вопрос. – aioobe
Одно «резервное» решение будет делать так же, как вы это делаете сейчас, но также проверять и обновлять границы через 'getBorder' и' instanceof TitledBorder'/'TitledBorder.setTitleFont' и т. Д. – aioobe