Não é de hoje que temos visto que o Java evolui a olhos vistos, apesar de muitos de nossos colegas de profissão falarem mal do Java dizendo que programação GUI nesta linguagem tem sido assaz complicada e bastante confusa. Porém, nem tudo são espinhos, o Swing veio em substituição ao AWT, o que nos diz que sempre houve evolução na plataforma SE. Pois então, agora temos outra novidade para Look and Feel para ser utilizada com o Swing e o que melhora.
Diante desta onda de Look and Feels existentes na Internet, sempre utilizei esta Look desde que fora publicada, a Nimbus.
Para aplicar a Nimbus é muito simples, basta adicionar o seguinte trecho em seu código:
try {
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (UnsupportedLookAndFeelException e) {
// handle exception
} catch (ClassNotFoundException e) {
// handle exception
} catch (InstantiationException e) {
// handle exception
} catch (IllegalAccessException e) {
// handle exception
}
Ou se quiser, pode ser via Linha de Comando durante a execução de sua aplicação:
-Dswing.defaultlaf=com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel
Porém, para facilitar eu criaei uma Singleton com um método estático:
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.UnsupportedLookAndFeelException;
/**
* Classe de Aplicação do Look and Feel GUI
* Nimbus
* @author Gabriel
*
*/
public class AplicaNimbusLookAndFeel {
private AplicaNimbusLookAndFeel() {
}
public static void pegaNimbus() {
try {
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (UnsupportedLookAndFeelException e) {
System.out.println("Erro: " + e.getMessage());
e.printStackTrace();
} catch (ClassNotFoundException e) {
System.out.println("Erro: " + e.getMessage());
e.printStackTrace();
} catch (InstantiationException e) {
System.out.println("Erro: " + e.getMessage());
e.printStackTrace();
} catch (IllegalAccessException e) {
System.out.println("Erro: " + e.getMessage());
e.printStackTrace();
}
}
}
Neste ponto você já deve estar interessado em saber como ficou a aparência da aplicação, diante desta curiosidade, vou mostrar aqui um exemplo de como é a aparência deste Look And Feel:

O código aqui exposto pode ser utilizado para aplicar qualquer Look And Feel que você deseje em suas aplicações.
Mostro agora a diferença e entre uma JOptionPane com o Motif - Look padrão do Swing - e outra com o Nimbus.


Viu só a diferença? Espero que lhe auxilie no design de seus formulários.
Copio abaixo, o código fonte do aplicativo retirado do Livro Java - Como Programar, dos Irmãos Deitel e da Editora Pearson apenas como exemplo para uma “degustação" da Nimbus. Posto que até os irmãos Deitel o adotaram na 8ª edição deste livro.
public class Soma {
public static void main(String[] args){
//Aplica o Nimbus
AplicaNimbusLookAndFeel.pegaNimbus();
//Obtém a entrada de usuário a partir dos diálogos de entrada JOptionPane
String primeiroNumero = JOptionPane.showInputDialog("Entre o primeiro numero Inteiro: ");
String segundoNumero = JOptionPane.showInputDialog("Entre o segundo numero Inteiro: ");
//Converte String em valores int para a utilizado em um calculo
Integer numero1 = Integer.parseInt(primeiroNumero);
Integer numero2 = Integer.parseInt(segundoNumero);
Integer soma = numero1 + numero2;
//Exibe o resultado em um diálogo de mansagem JOptionPane
//Icones para JOptionPane
//Usando a Classe JOptionPane
JOptionPane.showMessageDialog(null,"A soma e: " + soma,
"Soma entre dois inteiros",JOptionPane.PLAIN_MESSAGE);
}//Fim do método Main
}//Fim da Classe Soma
- Singleton para aplicação do Nimbus:
public class AplicaNimbusLookAndFeel {
private AplicaNimbusLookAndFeel() {
}
public static void pegaNimbus() {
try {
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (UnsupportedLookAndFeelException e) {
System.out.println("Erro: " + e.getMessage());
e.printStackTrace();
} catch (ClassNotFoundException e) {
System.out.println("Erro: " + e.getMessage());
e.printStackTrace();
} catch (InstantiationException e) {
System.out.println("Erro: " + e.getMessage());
e.printStackTrace();
} catch (IllegalAccessException e) {
System.out.println("Erro: " + e.getMessage());
e.printStackTrace();
}
}
Maiores informações sobre a Nimbus: Nimbus Look and Feel