Aparências de interface - Look and Feel
[b]Aparências de interface - Look and Feel[/b]
Por Cleuber Batista Silva
A GUI (graphical user interface) foi um dos elementos que revolucionaram a
computação nesta era, Java fornece métodos para que se possa construir sistemas multiplataforma não tendo que rescrever ou trocar a linguagem de programação conforme a utlização de uma outra plataforma para a aplicação desenvolvida.
[b]- O que é Look and Feel ?[/b]
Look and Feel é a aparência que sua aplicação irá tomar. o Look and Feel (aparência e comportamento)define a forma como seus componentes serão desenhados na tela.
[b]- Como faço para selecionar um Look and Feel ?[/b]
Deve-se selecionar um Look and Feel antes de criar a interface gráfica, podemos utlizar o método [b]UIManager.setLookAndFeel(LookandFeel) [/b]para definir qual será utlizado.
[b]- Métodos úteis :[/b]
[b]UIManager.getCrossPlatformLookAndFeelClassName()[/b] - retorna um objeto com o padrão java, que funciona em todas as plataformas.
[b]UIManager.getSystemLookAndFeelClassName()[/b] - retorna um objeto que representa a aparência do sistema onde o programa está rodando.
[b]- Alguns LookAndFeel´s :[/b]
[list]com.sun.java.swing.plaf.gtk.GTKLookAndFeel - padrão GTK+
javax.swing.plaf.metal.MetalLookAndFeel - Metal
com.sun.java.swing.plaf.windows.WindowsLookAndFeel - Windows
com.sun.java.swing.plaf.motif.MotifLookAndFeel - Motif
javax.swing.plaf.mac.MacLookAndFeel - Mac[/list]
Esta parte do código "seta" um Look And Feel e também atualiza com o [b]SwingUtilities.updateComponentTreeUI(this)[/b], fazendo com que a aparência seja carregada em modo de execução de uma aplicação.
Agora toda a classe :
Depois é só compilar e rodar :)
Espero que este tutorial seja apreciado por todos, pode-se também encontrar vários Look And Feel na internet abaixo um site interessante que contém vários LAF´s para você usar:
http://www.jdance.com/lookandfeel.shtm
Links sobre look and feel:
[url=http://java.sun.com/products/jlf/ed2/book/index.html]Java Look and Feel Design Guidelines[/url]
[url=http://java.sun.com/products/jlf/at/book/index.html]Java Look and Feel Design Guidelines: Advanced Topics[/url]
[url=http://java.sun.com/developer/techDocs/hi/repository/]Java look and feel Graphics Repository[/url]
[url=http://java.sun.com/developer/techDocs/hi/jlf.html]Papers on Java Software Human Interface Issues and More[/url]
:!:
Cleuber Batista Silva
cleuber_s@hotmail.com
OB.: ALguns Look And Feel´s podem levantar um exceção, por não existirem, ou não estarem instalados no sistema, ou não serem suportados em determinadas plataformas.
É importante resalvar também que a depender do layout utilizado uma determinada aplicação pode ter problemas de aparência, por que tamanhos de botões, caixas de texto e outros
componentes variam de plataforma para plataforma, e podem fazer com que a aparência de uma aplicação fique desorganizada.
[b] - Um exemplo ( LFDemo.java )[/b]
Neste tutorial vamos construir uma aplicação que pega todos os Look And
Feel´s instalados e fornece ao usuário a oportunidade de trocá-los.
Esta parte do código pega o LAF´s instalados e os mostra como componentes Radio :
for (int i = 0; i < looks.length; i++){
escolha[i] = new JRadioButton( looks[i].getName() );
public void atualiza(int i){
try {
UIManager.setLookAndFeel(looks[i].getClassName());
SwingUtilities.updateComponentTreeUI(this);
}catch(Exception e) {
e.printStackTrace();
}
}
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class LFDemo extends JFrame{
private UIManager.LookAndFeelInfo[] looks =
UIManager.getInstalledLookAndFeels();
private JLabel lbLabel01 = new JLabel("Nome :");
private JLabel lbLabel02 = new JLabel("E-mail :");
private JTextField jtTexto01 = new JTextField( 10 );
private JTextField jtTexto02 = new JTextField( 10 );
private JButton jbOk = new JButton("Enviar");
private JButton jbLim = new JButton("Limpar");
private JRadioButton[] escolha = new JRadioButton[ looks.length ];
private ButtonGroup grupo = new ButtonGroup();
public static void main( String[] args ){
LFDemo lfd = new LFDemo();
lfd.show();
}
public LFDemo(){
super("Selecione um LF");
Container c = getContentPane();
c.setLayout ( new FlowLayout());
c.add(lbLabel01);
c.add(jtTexto01);
c.add(lbLabel02);
c.add(jtTexto02);
c.add(jbOk);
c.add(jbLim);
ItemSelecionado iselect = new ItemSelecionado();
for (int i = 0; i < looks.length; i++){
escolha[i] = new JRadioButton( looks[i].getName() );
escolha[i].addItemListener( iselect );
grupo.add( escolha[i] );
c.add( escolha[i] );
}
escolha[2].setSelected( true );
setDefaultCloseOperation( EXIT_ON_CLOSE );
setSize(200,250);
}
public void atualiza(int i){
try {
UIManager.setLookAndFeel(looks[i].getClassName());
SwingUtilities.updateComponentTreeUI(this);
}catch(Exception e) {
e.printStackTrace();
}
}
private class ItemSelecionado implements ItemListener {
public void itemStateChanged( ItemEvent e) {
for (int i=0; i < escolha.length; i++){
if (escolha[i].isSelected())
atualiza(i);
}
}
}
}
Vitor Pamplona
Curtidas 0
Respostas
Ricardo
09/04/2009
Muito bala este tutorial, eu já tinha ouvido várias vezes sobre isso, mas nunca tinha me interessado... ótimo este tutorial
GOSTEI 0
Nélio Mesquita
09/04/2009
Será que eu posso fazer isso, mas utilizando menu itens ao inves de radio buttons?
GOSTEI 0
Jairo Luiz
09/04/2009
Olá,
muito bom mesmo...
consegui fazer utilizando JComboBox....
Ficou muito bom!
valewww
:evil:
GOSTEI 0
Leonardo Moreira
09/04/2009
Coloquei um Skin na minha aplicação, ficou mto legal, mas.....as telas e componentes ficaram maiores e passaram a nao caber. Como resolver isso..Vlw
GOSTEI 0
Pcmnac
09/04/2009
Criei recentemente um componente para deixar essa interação bem fácil. Usando ele fica bem tranquilo fazer esse esquema de mudar de look. É um component opensource e tá no googlecode.
http://code.google.com/p/easylookandfeel/
:!:
GOSTEI 0
Jonatas Moraes
09/04/2009
Bom dia pessoa!
o seguinte tentei usa lookandfeel da mac que voce da de exemplo soh que nao deu certo!sera que pelo fato de ser da aplle nao roda em windows?
ou tem algo de errado no meu codigo!!?
public class LookAndFeel extends JPanel implements ActionListener {
private JButton metalButton = new JButton("Metal");
private JButton motifButton = new JButton("Motif");
private JButton windowsButton = new JButton("Windows");
private JButton macButton = new JButton("Mac");
public LookAndFeel() {
add(metalButton);
add(motifButton);
add(windowsButton);
add(macButton);
metalButton.addActionListener(this);
motifButton.addActionListener(this);
windowsButton.addActionListener(this);
macButton.addActionListener(this);
}
public void actionPerformed(ActionEvent evt) {
Object source = evt.getSource();
String plaf = "";
if (source == metalButton)
plaf = "javax.swing.plaf.metal.MetalLookAndFeel";
else if (source == motifButton)
plaf = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
else if (source == windowsButton)
plaf = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
else if (source == macButton)
plaf = "javax.swing.plaf.mac.MacLookAndFeel.Mac";
try {
UIManager.setLookAndFeel(plaf);
SwingUtilities.updateComponentTreeUI(this);
} catch (Exception e) {
}
}
}GOSTEI 0
Carlos Heuberger
09/04/2009
se o programa não funciona, voce deveria no mínimo mandar imprimir as Exceptions em vez de ignorá-las.
deve exibir algo como: ClassNotFoundException: javax.swing.plaf.mac.MacLookAndFeel.Mac
indicando que não encontrou a classe em questão, ou seja, ela não está instalada, deve vir somente nos sistemas da Apple. (provavelmente usa recursos do sistema operacional)
[]]
...
try {
UIManager.setLookAndFeel(plaf);
SwingUtilities.updateComponentTreeUI(this);
} catch (Exception e) {
e.printStackTrace();
}
...GOSTEI 0
Davi Pereira
09/04/2009
Bom artigo! :P :amigos:
GOSTEI 0
Davi Pereira
09/04/2009
Ótimo artigo !!!
GOSTEI 0