2012-10-04 73 views
7

Quiero establecer una fuente específica para todos los componentes en un JPanel pero prefiero que la pregunta sea aún más general y no se limite a JPanel. ¿Cómo puedo configurar la fuente en una lista de componentes en un contenedor (JFrame o JPanel)?Establecer la misma fuente para todos los componentes Java

Respuesta

3

Establezca los valores de fuente en UIManager para los componentes que desea cambiar. Por ejemplo, se puede establecer el tipo de letra utilizado para las etiquetas haciendo:

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

Tenga en cuenta que un aspecto diferente y se siente (L & F) pueden tener diferentes propiedades de la clase UIManager, por lo que si se cambia de una L & F a otro, puede tener problemas.

+0

Si uso UIManager puedo cambiar el tipo de letra para el componente en toda la aplicación, pero yo no quiero cambiarlo solo en un 'JFrame' o' JPanel' específico. Gracias – Luca

8

- Puede utilizar UIManager hacer esto ....

Ej:

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

Si uso UIManager, cambio la fuente al componente en toda la aplicación, pero no quiero cambiarlo solo en un 'JFrame' o' JPanel' específico. Gracias – Luca

16

Aquí es un método simple que le permite especificar la fuente al árbol de componentes enteros bajo cualquier contenedor (o simplemente un componente simple, no 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); 
     } 
    } 
} 

Simplemente pase y nuestro panel y la fuente específica en este método y obtendrá todos los niños también refactorizados.

+0

Impresionante, está funcionando bien, he cambiado el código de este tipo, y me está ayudando, estoy publicando ese código en la Respuesta –

2

Inspirado en Mikle Granos respuesta utilicé su código para aumentar la fuente de cada componente en porcentaje en marcha el viejo tamaño de fuente

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); 
     } 
    } 
} 
Cuestiones relacionadas