Próbuję utworzyć panel Swing, którego elementy mają inny rozmiar czcionki niż reszta aplikacji swing. Początkowo używanie setFont
dla kilku składników nie stanowiło problemu. Teraz mam kilka komponentów (i wszystkie ich podkomponenty), więc to rozwiązanie jest niepraktyczne.Zmiana rozmiaru czcionki JPanel i wszystkich jej elementów
Szukałem informacji o zmianie domyślnych właściwości interfejsu użytkownika komponentów swing. Znalazłem głównie UIManager, który zmienia właściwości na całym świecie. Nie działa to dla mnie, ponieważ chcę zachować bieżące ustawienia czcionek dla wszystkich pozostałych paneli.
W tej chwili (a ponieważ nie podoba mi odpowiedzieć, nie próbując coś pierwszy), mam algorytm takiego:
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));
}
}
}
Problem polega na tym, że:
- to nie obejmuje niektórych elementów swingujących, takich jak jego obramowanie.
- muszę wywołać tę funkcję kiedy dodać inne składniki dynamicznie
Pytanie: Czy istnieje inny sposób na zmianę właściwości czcionki panelu swing i wszystkie jego komponenty, elementy itd (czyli wszystko panel) ?
Dzięki za pomysły
Chcę zmienić tylko czcionki panelu i wszystkie jego elementy. Nie chcę zmieniać czcionki innych paneli. Wykonanie tej czynności za pomocą narzędzia UIManager zmienia czcionkę dla wszystkich komponentów Swing. – YuppieNetworking
Ah, dobra uwaga. Nie zdawałem sobie sprawy, czego naprawdę potrzebujesz. Nie wiem, jak (lub jeśli to możliwe) rozwiązać teraz, gdy rozumiem twoje pytanie. – aioobe
Jednym z "zapasowych" rozwiązań byłoby zrobić tak, jak to robisz teraz, ale również sprawdzić i zaktualizować granice poprzez 'getBorder' i' instanceof TitledBorder'/'TitledBorder.setTitleFont' etc – aioobe