Fonte personalizada em todos os componentes

Olá! Durante o desenvolvimento do meu TCC, lembrei de um detalhe que é a falta das fontes do Windows no Linux.

Então resolvi tentar fazer a importação de uma font no diretório do projeto. Demorei achar uma solução, porém, existem dois detalhes que são graves.
Primeiro: Se eu quiser mudar o tamanho da fonte, terei que fazer outro método.
Segundo: Se existem 50 Labels, terei que ir em uma por uma e alterar utilizando .setFont()…

Classe da fonte:

public class fontManager {
Font fonte;
public Font font() throws MalformedURLException, IOException, FontFormatException {
    URL fontUrl = new URL("file:fonts/OpenSansCondensed-Bold.ttf");
    fonte = Font.createFont(Font.TRUETYPE_FONT, fontUrl.openStream());
    fonte = fonte.deriveFont(Font.PLAIN, 20);
    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    ge.registerFont(fonte);
    return fonte;
}

}

Form onde seriam aplicadas:

public NewJFrame() throws IOException, MalformedURLException, FontFormatException {
    initComponents();
    
    fontManager ftn = new fontManager();
    Font f = ftn.font();
    jLabel1.setFont(f);
}

Parte do problema já foi solucionada, sendo a questão de não poder definir tamanhos personalizados. Aqui está o código:

    public class fontManager { 

   public static final String CUSTOM1 = "/fonts/custom1.ttf"; 
   public static final String CUSTOM2 = "/fonts/custom2.ttf"; 
   public static final String CUSTOM3 = "/fonts/custom3.ttf"; 

   public static Font getFont(String fontName, int style, int size) { 
      Font font = null; 
      try { 
         InputStream fontStream = fontManager.class.getResourceAsStream(fontName); 
         font = Font.createFont(Font.TRUETYPE_FONT, fontStream); 
         font = font.deriveFont(style, size); 
         fontStream.close(); 
      } 
      catch(Exception ex) { 
         System.out.println(ex.getMessage()); 
      } 
      return font; 
   } 
   
} 

public NewJFrame() throws IOException, MalformedURLException, FontFormatException {
    initComponents();
    
    fontManager ftn = new fontManager();
    Font myFont = ftn.getFont(ftn.CUSTOM2, Font.BOLD, 20);
   
}

Eu criaria uma Factory para instanciar os componentes com a fonte personalizada.

1 curtida