Java – Anti-aliasing de fontes em aplicações gráficas


Olá Mundo GNU!

Nesta pequena e rápida dica irei mostrar como habilitar o anti-aliasing de fontes em aplicações gráficas feitas em Java.

Aqui um exemplo:

java_anti-aliasing_off

Esta simples calculadora fica com um aspecto muito feio se executada no GNU/Linux, mas fica normal se executada no Windows.

Mais um exemplo, desta vez prático:

Crie um arquivo “Teste.java” com o seguinte conteúdo:

import javax.swing.JOptionPane;

public class Teste {
    public static void main(String[] args) {
       JOptionPane.showMessageDialog(null, "Este é um teste de FONTE!", "Teste", JOptionPane.PLAIN_MESSAGE);
       System.exit(0);
    }
}

Compile (se você tiver o Java JDK instalado):

$ javac Teste.java

Execute:

$ java Teste

Repare que a fonte está serrilhada.

Para corrigir, há três maneiras:

1. A difícil:

Executar o arquivo java passando o parâmetro “-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true”. No nosso exemplo, ficaria:

$ java -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true Teste

Mas este modo é inviável, especialmente se executamos vários programas Java diferentes.

2. A personalizada:

Adicionar este parâmetro no seu arquivo .bashrc, através da variável _JAVA_OPTIONS:

export _JAVA_OPTIONS="-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true"

Assim, toda vez que você executar um programa Java, automaticamente ele setará esta opção, inclusive se você executar a aplicação dentro de uma IDE (como o Eclipse, por exemplo).

Obs.: não se esqueça de efetuar logoff/logon para que as mudanças façam efeito.

3. A correta:

Altere o arquivo Java*!

*Isso se você for o próprio desenvolvedor do programa, rs.

Assim, o anti-aliasing já estará ativado por padrão, no próprio aplicativo, sem a necessidade do usuário final configurar algo.

Para isso, simplesmente adicione os parâmetros:

System.setProperty("swing.aatext", "true" );
System.setProperty("awt.useSystemAAFontSettings","on");

Dentro da classe main, antes de chamar a sua aplicação. O nosso exemplo Teste.java ficaria assim:

import javax.swing.JOptionPane;

public class Teste {
    public static void main(String[] args) {
        System.setProperty("swing.aatext", "true" );
        System.setProperty("awt.useSystemAAFontSettings","on");
        JOptionPane.showMessageDialog(null, "Este é um teste de FONTE!", "Teste", JOptionPane.PLAIN_MESSAGE);
        System.exit(0);
    }
}

Para finalizar, eis a calculadora com anti-aliasing ativado (bem melhor, não? =) ):

java_anti-aliasing_on

Referências:

http://gordonazmo.wordpress.com/2010/02/26/turning-antialiasing-on-for-java-applications-in-x11/

Anúncios
Java – Anti-aliasing de fontes em aplicações gráficas

5 comentários sobre “Java – Anti-aliasing de fontes em aplicações gráficas

  1. marco brainiac disse:

    Oi Leandro, beleza?

    Como habilito para funcionar as bibliotecas javax.swing.JOptionPane?

    No meu Debian e no Mint (ambos KDE) nem rodam.

    Este por exemplo:

    Fiz no kwrite e salvei como variavel.java

    // ativando importação do recurso
    import javax.swing.JOptionPane;

    //nome do programa
    public class variavel {

    public static void main(String[] args) {

    String nome;// Declaração de variável

    nome = “marcel domingues “; // Atribuindo Valores
    // String adress; Ou declara junto como em baixo

    String adress = “Av. 7 de setembro, 106”; // Declarando e atribuindo valor ao mesmo tempo!

    // saídas

    // mostra na caixa de mensagem
    JOptionPane.showMessageDialog(null, “Nome : ” +nome+ “Endreço : ” +adress);

    //mostrar de outra forma
    System.out.println( “nome =: ” +nome+ “Endereço : ” +adress );

    }

    }

    No terminal:

    Compila:

    hotpc2 workspace # javac variavel.java

    Qdo executo:
    hotpc2 workspace # java variavel
    No protocol specified
    No protocol specified
    Exception in thread “main” java.lang.InternalError: Can’t connect to X11 window server using ‘:0’ as the value of the DISPLAY variable.
    at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
    at sun.awt.X11GraphicsEnvironment.access$200(X11GraphicsEnvironment.java:62)
    at sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:178)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.awt.X11GraphicsEnvironment.(X11GraphicsEnvironment.java:142)

    Curtir

    1. Leandro Nkz disse:

      Tudo bem, e vc?

      Aparentemente este erro não é do Java, mas sim do seu servidor gráfico (o “X”). Pela saída do terminal que você postou, você está utilizando o root para compilar/executar o arquivo Java. Com isso, ao se tornar root, você não conseguirá executar aplicativos gráficos.

      Duas formas de testar:

      1- Mais fácil: compile e execute como um usuário normal. Eu mesmo nunca precisei executar nenhum programa Java como root. Sempre utilizo o meu usuário normal.

      2- Utilize o sux, como nesta dica do Edinaldo:

      http://www.vivaolinux.com.br/dica/Rodando-aplicacoes-graficas-como-Root-no-Debian-e-derivados

      Qualquer dúvida é só falar.
      Abraços.

      Curtir

  2. Brainiac disse:

    Muito obrigado amigo,

    Funcionou sem estar como ‘root’ quebrei a cachola com isto um tempão, vou aproveitar e ecanixaro sux tb.

    Bom fim de semana e grato pela atenção e ajuda

    Curtir

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s