Como posso usar uma fonte personalizada em Java?

Eu escrevi um programa em Java que usa uma fonte especial que, por padrão, não existe em nenhum sistema operacional.

É possível em Java adicionar essa fonte especial ao sistema operacional? Por exemplo, no Windows, para copiar essa fonte para a pasta especial Fonts.

Se é possível, como?

Se você include um arquivo de fonte (otf, ttf, etc.) em seu pacote, poderá usar a fonte em seu aplicativo por meio do método descrito aqui:

Oracle Java SE 6: java.awt.Font

Existe um tutorial disponível no Oracle que mostra este exemplo:

try { GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, new File("A.ttf"))); } catch (IOException|FontFormatException e) { //Handle exception } 

Eu provavelmente iria envolvê-lo em algum tipo de carregador de resources, a fim de não recarregar o arquivo do pacote toda vez que você quiser usá-lo.

Uma resposta mais relacionada à sua pergunta original seria instalar a fonte como parte do processo de instalação do seu aplicativo. Esse processo dependerá do método de instalação escolhido. Se não for um aplicativo de desktop, você terá que examinar os links fornecidos.

Aqui está como eu fiz isso!

 //create the font try { //create the font to use. Specify the size! Font customFont = Font.createFont(Font.TRUETYPE_FONT, new File("Fonts\\custom_font.ttf")).deriveFont(12f); GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); //register the font ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, new File("Fonts\\custom_font.ttf"))); } catch (IOException e) { e.printStackTrace(); } catch(FontFormatException e) { e.printStackTrace(); } //use the font yourSwingComponent.setFont(customFont); 

No tutorial Java , você precisa criar uma nova fonte e registrá-la no ambiente gráfico:

 GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, new File("A.ttf"))); 

Após essa etapa, a fonte fica disponível em chamadas para getAvailableFontFamilyNames() e pode ser usada em construtores de fonte.

Se você quiser usar a fonte para desenhar com graphics2d ou similar, isso funciona:

 InputStream stream = ClassLoader.getSystemClassLoader().getResourceAsStream("roboto-bold.ttf") Font font = Font.createFont(Font.TRUETYPE_FONT, stream).deriveFont(48f) 

Você pode carregar uma fonte de um arquivo ou um InputStream . Em seguida, ele pode ser alimentado para o método Component.setFont () (ou similar) para uso.