Mudar a fonte padrão de um JFrame

Olá pessoal… sempre que eu desenvolvo aplicações gráficas, e preciso alterar a fonte do mesmo, eu vou em cada componente e altero usando o setFont();

Não tem alguma maneira de fazer com que todos os componentes fiquem com a fonte desejada sem q ter alterar um por um??

Abraços…

Bem, segundo o javadoc…

[quote]public void setFont(Font f)

Sets the font of this component.

Parameters:
    f - the font to become this component's font; if this parameter is null then this component will inherit the font of its parent[/quote]

Ou seja, use o setFont() no container, como o JPanel ou mesmo o JFrame em que os componentes estão, e um setFont(null) pra todo o resto.

Daria pra fazer um método pra fazer isso pra você, mas tecnicamente ainda seria alterar a fonte um por um né… e aí ao invés de setar null daria na mesma colocar a fonte que você quer.

Abraços tchau

Se você está usando o “Metal Theme” pode criar um tema, derivado do Metal, com os fontes-padrão alterados. Leia a documentação de javax.swing.plaf.metal.DefaultMetalTheme. Por exemplo:

import java.awt.Font;
import javax.swing.plaf.ColorUIResource;
import javax.swing.plaf.FontUIResource;
import javax.swing.plaf.metal.DefaultMetalTheme;

public class MeuMetalTheme extends DefaultMetalTheme {
    private final Font defaultFont;
    private final FontUIResource userTextFont;
    public MeuMetalTheme () {
        defaultFont = new Font ("Lucida Sans", Font.PLAIN, 12);
        userTextFont = new FontUIResource (defaultFont);
    }
    public FontUIResource getUserTextFont() {
        return userTextFont;
    }

}
...

            MetalTheme theme = new MeuMetalTheme();
            MetalLookAndFeel laf = new MetalLookAndFeel();
            laf.setCurrentTheme (theme);
            UIManager.setLookAndFeel(laf);
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new MainFrame().setVisible(true);
            }
        });