Fórum Aparências de interface - Look and Feel #566038

09/04/2009

0

[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]
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() );
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.
        public void atualiza(int i){
          try {
          UIManager.setLookAndFeel(looks[i].getClassName());
          SwingUtilities.updateComponentTreeUI(this);
          }catch(Exception e) {
          e.printStackTrace();
          }
        }
Agora toda a classe :
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);
            }
          }
  }
}
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
Vitor Pamplona

Vitor Pamplona

Responder

Posts

09/04/2009

Ricardo

Muito bala este tutorial, eu já tinha ouvido várias vezes sobre isso, mas nunca tinha me interessado... ótimo este tutorial
Responder

Gostei + 0

09/04/2009

Nélio Mesquita

Será que eu posso fazer isso, mas utilizando menu itens ao inves de radio buttons?
Responder

Gostei + 0

09/04/2009

Jairo Luiz

Olá, muito bom mesmo... consegui fazer utilizando JComboBox.... Ficou muito bom! valewww :evil:
Responder

Gostei + 0

09/04/2009

Leonardo Moreira

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
Responder

Gostei + 0

09/04/2009

Pcmnac

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/ :!:
Responder

Gostei + 0

09/04/2009

Jonatas Moraes

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) {
      }
    }

  }
Responder

Gostei + 0

09/04/2009

Carlos Heuberger

se o programa não funciona, voce deveria no mínimo mandar imprimir as Exceptions em vez de ignorá-las.
...
try {
  UIManager.setLookAndFeel(plaf);  
  SwingUtilities.updateComponentTreeUI(this);  
} catch (Exception e) {  
  e.printStackTrace();
}
...
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) []]
Responder

Gostei + 0

09/04/2009

Davi Pereira

Bom artigo! :P :amigos:
Responder

Gostei + 0

16/01/2010

Davi Pereira

Ótimo artigo !!!
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar