2012-10-04 13 views

Odpowiedz

3

Ustaw wartości czcionki w UIManager dla komponentów, które chcesz zmienić. Na przykład, można ustawić czcionkę do etykiet, wykonując:

Font labelFont = ... ; 
UIManager.put("Label.font", labelFont); 

Zauważ, że inny wygląd i czuje (L & F) mogą mieć różne właściwości dla klasy UIManager, więc jeśli przełączanie z jednego L & F do innego, możesz mieć problemy.

+0

Jeśli używam UIManager zmienić czcionkę do komponentu całej aplikacji, ale nie można go zmienić tylko w określonym 'JFrame' lub' JPanel'. Dzięki – Luca

8

- Można użyć UIManager to zrobić ....

Np:

public class FrameTest { 

    public static void setUIFont(FontUIResource f) { 
     Enumeration keys = UIManager.getDefaults().keys(); 
     while (keys.hasMoreElements()) { 
      Object key = keys.nextElement(); 
      Object value = UIManager.get(key); 
      if (value instanceof FontUIResource) { 
       FontUIResource orig = (FontUIResource) value; 
       Font font = new Font(f.getFontName(), orig.getStyle(), f.getSize()); 
       UIManager.put(key, new FontUIResource(font)); 
      } 
     } 
    } 

    public static void main(String[] args) throws InterruptedException { 

     setUIFont(new FontUIResource(new Font("Arial", 0, 20))); 

     JFrame f = new JFrame("Demo"); 
     f.getContentPane().setLayout(new BorderLayout()); 

     JPanel p = new JPanel(); 
     p.add(new JLabel("hello")); 
     p.setBorder(BorderFactory.createTitledBorder("Test Title")); 

     f.add(p); 

     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setSize(300, 300); 
     f.setVisible(true); 
    } 
} 
+0

Jeśli używam UIManagera, zmieniam czcionkę na komponent w całej aplikacji, ale nie będę go zmieniać tylko w konkretnym 'JFrame' lub' JPanel'. Dzięki – Luca

16

Oto prosta metoda, która pozwala określić czcionkę do drzewa całych podzespołów mocy dowolny kontener (lub tylko prosty komponent, nie ma znaczenia):

public static void changeFont (Component component, Font font) 
{ 
    component.setFont (font); 
    if (component instanceof Container) 
    { 
     for (Component child : ((Container) component).getComponents()) 
     { 
      changeFont (child, font); 
     } 
    } 
} 

Po prostu prześlij nasz panel i określone Czcionki w tej metodzie, a otrzymasz również wszystkie dzieci refakturowane.

+0

Niesamowite, działa świetnie, zmieniłem trochę twój kod, i to mi pomaga, zamieszczam ten kod w odpowiedzi –

2

Zainspirowany od Mikle Ziarna Odpowiedź użyłem swojego kodu, aby zwiększyć czcionkę każdego składnika w procentach coraz starą fontsize

public static void changeFont(Component component, int fontSize) { 
    Font f = component.getFont(); 
    component.setFont(new Font(f.getName(),f.getStyle(),f.getSize() + fontSize)); 
    if (component instanceof Container) { 
     for (Component child : ((Container) component).getComponents()) { 
      changeFont(child, fontSize); 
     } 
    } 
} 
Powiązane problemy