Customizando Fontes Em Aplicações Java
Ás vezes distribuimos aplicações desktop que necessitam de fontes que em alguns casos não encontram-se instaladas no SO. Pode ser o caso de fontes orientais como chinês, japonês, koreano e etc. Essa solução elimina eventuais problemas de caracteres inválidos aparecendo no meio de um texto (aqueles quadradinhos), pois a aplicação não mais dependerá apenas de fontes previamente instaladas no ambiente gráfico. Essas situações são comumente observadas no linux, já que no Windows existem ótimas fontes orientais e em outros sistemas operacionais não fiz a constatação.
O UIManager gerencia (como diz o proprio nome) as propriedades de cada componente swing tais como: fonte, cor de fundo, borda. Essas configurações são refletidas ao se instanciar um componente swing, ou seja, se você deseja que todos os JLabels, por padrão, possuam a fonte "Comic sans" faça o seguinte:
UIManager.getDefaults().put("Label.font", new Font("Comic Sans",Font.PLAIN,12));
Sendo assim, segue abaixo um método que lê uma fonte dinamicamente a partir de um path informado e altera, para essa fonte, as respectivas propriedades no UIManager para cada componente:
public void setAppFonts(String path)
throws FontFormatException, IOException {
File file = new File(path);
FileInputStream in = new FileInputStream(file);
/* According to javadoc only true type fonts are recognized for while */
Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT, in);
/* Changing all UIManager fonts to a derived font */
Hashtable defaults = UIManager.getDefaults();
Enumeration keys = defaults.keys();
while (keys.hasMoreElements()) {
Object key = keys.nextElement();
if ((key instanceof String)
&& (((String) key).toLowerCase().endsWith("font"))) {
if (defaults.get(key) instanceof Font) {
Font currentFont = UIManager.getFont((String) key);
Font derivedFont = dynamicFont.deriveFont(new Float(
currentFont.getSize()).floatValue());
defaults.put(key, derivedFont);
}
}
}
}
0 Comments:
Post a Comment
<< Home