Estoy tratando de crear un panel Swing cuyos elementos tengan un tamaño de letra diferente al resto de la aplicación swing. Inicialmente, usar setFont
para un par de componentes no presentaba ningún problema. Ahora tengo varios componentes (y todos sus subcomponentes), por lo que esta solución no es práctica.Cambiar el tamaño de fuente de un JPanel y todos sus elementos
He buscado sobre el cambio de las propiedades de IU predeterminadas de los componentes oscilantes. Lo que he encontrado es principalmente el uso de UIManager, que cambia las propiedades de forma global. Esto no funciona para mí porque quiero mantener la configuración de fuente actual para todos los demás paneles.
Por el momento (y ya que no me gusta para publicar algo sin tratar, en primer lugar), tengo un algoritmo como esto:
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));
}
}
}
El problema es que:
- se no incluye ciertos elementos de giro como su borde.
- Tengo que llamar a esta función cuando agrego otros componentes dinámicamente
Pregunta: ¿Hay otra manera de cambiar las propiedades de la fuente de un panel de media vuelta y todos sus componentes, elementos, etc (es decir, todo en el panel) ?
Gracias por sus ideas
Quiero cambiar solo las fuentes del panel y todos sus elementos. No quiero cambiar la fuente de otros paneles. Al hacer esto con UIManager, se cambia la fuente de todos los componentes de Swing. – YuppieNetworking
Ah, buen punto. No me di cuenta de lo que realmente necesitabas. No estoy seguro de cómo (o si es posible) resolverlo ahora que entiendo tu pregunta. – aioobe
Una solución de "copia de seguridad" sería hacer lo mismo que ahora, pero también verificar y actualizar los bordes mediante 'getBorder' y' instanceof TitledBorder'/'TitledBorder.setTitleFont' etc. – aioobe