2012-10-04 15 views
7

Desidero impostare un carattere specifico per tutti i componenti in un JPanel ma preferisco che la domanda sia ancora più generale e non limitata allo JPanel. Come posso impostare il carattere su un elenco di componenti in un contenitore (JFrame o JPanel)?Impostare lo stesso carattere per tutti i componenti Java

risposta

3

Impostare i valori del carattere in UIManager per i componenti che si desidera modificare. Ad esempio, è possibile impostare il tipo di carattere utilizzato per le etichette facendo:

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

notare che diverse aspetto e si sente (L & F) possono avere proprietà differenti per la classe UIManager, quindi se si passa da una L & F a un altro, potresti avere problemi.

+0

Se uso UIManager cambio il tipo di carattere per la componente in tutta l'applicazione, ma io non potremmo cambiarlo solo in uno specifico 'JFrame' o' JPanel'. Grazie – Luca

8

- È possibile utilizzare UIManager per fare questo ....

Esempio:

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

Se uso UIManager I cambi il font nel componente in tutta l'applicazione, ma non lo cambierei solo in uno specifico 'JFrame' o' JPanel'. Grazie – Luca

16

Ecco un metodo semplice che consente di specificare Font per l'albero componenti intere sotto qualsiasi contenitore (o solo un semplice componente, non importa):

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

Basta passare il nostro pannello e Font specifici in questo metodo e avrai anche tutti i refactored di childs.

+0

Fantastico, funziona benissimo, ho cambiato il tuo bit di codice in questo modo, e mi sta aiutando, sto postando quel codice nella risposta –

2

Ispirato da Mikle Grani risposta ho usato il suo codice per aumentare il carattere di ciascun componente in percentuale ottenendo il vecchio 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); 
     } 
    } 
} 
Problemi correlati