Você está na página 1de 30
> UOL BUSCAR Lo g in Re g istre-se  HOME  NOTÍCIAS  ARTIGOS

>

UOL

BUSCAR
BUSCAR
> UOL BUSCAR Lo g in Re g istre-se  HOME  NOTÍCIAS  ARTIGOS 
> UOL BUSCAR Lo g in Re g istre-se  HOME  NOTÍCIAS  ARTIGOS 
> UOL BUSCAR Lo g in Re g istre-se  HOME  NOTÍCIAS  ARTIGOS 

HOME

NOTÍCIAS

ARTIGOS

FÓRUM

WIKI

BUSCA

SOBRE

Publicado por Tutoriais Admin em 16/08/2009 - 38.109 visualizações

Tutoriais Admin em 16/08/2009 - 38.109 visualizações comentários: 0 Por Rafael Fiume Esse artigo é baseado

comentários: 0 Por Rafael Fiume

Esse artigo é baseado numa série de publicações sobre look and feel do blog Cotidiano em Wonderland. Introdução

A interface gráfica de um aplicativo desenvolvido sobre a plataforma Java pode tornar-se mais bonita, agradável e eficaz utilizando o look and feel certo. Simplificadamente, look and feel (L&F) é a aparência e o comportamento de um programa. A Sun JRE (Java Runtime Environment) fornece quatro look and feels:

CrossPlatformLookAndFeel (Metal) - look and feel padrão, semelhante em todas as plataformas

SystemLookAndFeel - look and feel nativo do sistema operacional em que o software está rodando

Synth - pode ser facilmente customizado a partir de arquivos XML, até mesmo por não-programadores.

Multiplexing - pode ser extendido e delegar serviços UI para mais de um look and feel.

Definindo um Look and Feel

Especifique o L&F do aplicativo programaticamente através da classe javax.swing.UIManager. Deve ser a primeira tarefa de um aplicativo.

1.

public static void main(final String args[]) {

2.

java awt EventQueue.invokeLater( new Runnable() {

3.

public void run() {

4.

try {

5.

UIManager.setLookAndFeel(UIManager getSystemLookAndFeelClassName());

6.

} catch (UnsupportedLookAndFeelException ex) {

7.

ex.printStackTrace();

8.

} catch (IllegalAccessException ex) {

9.

ex.printStackTrace();

10.

} catch (InstantiationException ex) {

11.

ex.printStackTrace();

12.

} catch (ClassNotFoundException ex) {

13.

ex.printStackTrace();

14.

}

15.

new MyApplication().setVisible( true);

16.

}

17.

});

18. }

 

Opcionalmente, especifique o look and feel através da linha de comando.

1. java -Dswing.defaultlaf=com.jgoodies.looks.plastic.Plastic3DLookAndFeel MyApplication

Há ainda a opção de ajustar o L&F por meio de um arquivo de propriedades chamado swing.properties, com a propriedade swing.defaultlaf. Esse arquivo deve estar na pasta lib da JRE da Sun.

1. swing.defaultlaf=com.jgoodies.looks.plastic.Plastic3DLookAndFeel

Alterando o look and feel durante a execução de um programa

Invoque o método updateComponentTreeUI(Component c), de SwingUtilities, para alterar o look and feel de um aplicativo já em execução. O método pack(), de JFrame, serve para redimensionar corretamente a janela de acordo com o novo look and feel.

1. UIManager.setLookAndFeel(lafName);

2. SwingUtilities.updateComponentTreeUI(aFrame);

3. aFrame.pack();

JGoodies Looks

Segundo a descrição no sítio do projeto,

JGoodies Looks faz com que aplicativos e applets Swing tenham uma melhor aparência. Esse pacote consiste num preciso Look&Feel Windows e na elegante família Plastic Look&Feel, otimizados para leitura, micro-design e usabilidade.

De fato, o JGoodies Looks está entre os mais reconhecidos e conceituados entre os look and feels existentes. Está disponível sob a licença BSD, o que praticamente dá liberdade total aos usuários dessa biblioteca.

A figura 1, logo abaixo, mostra o ModelMat utilizando o look and feel padrão (Metal).

Eis o mesmo programa utilizando o Plastic3D Look&Feel (fig. 2).

JGoodies in Action Para começar é preciso fazer o download do JGoodies Looks. Adicione a biblioteca ao classpath do aplicativo e use o método setLookAndFeel(LookAndFeel laf), de UIManager, durante a execução de main para alterar o look and feel programaticamente.

1.

public static void main(final String args[]) {

2.

java awt EventQueue invokeLater( new Runnable() {

3.

public void run() {

4.

try {

5.

UIManager.setLookAndFeel(new Plastic3DLookAndFeel());

6.

} catch (UnsupportedLookAndFeelException ex) {

7.

ex.printStackTrace();

8.

}

9.

new ModelMat().setVisible( true);

10.

}

11.

});

12.

}

As classes podem ser:

com.jgoodies.looks.windows.WindowsLookAndFeel

com.jgoodies.looks.plastic.PlasticLookAndFeel

com.jgoodies.looks.plastic.Plastic3DLookAndFeel

com.jgoodies.looks.plastic.PlasticXPLookAndFeel

Temas

JGoodies Looks provê uma série de temas, que mudam cores e fontes dos componentes.

Atualmente, na versão 2.0.4, os temas disponíveis são: Sky Yellow, Sky Red, Sky Pink, Sky Krupp, Sky Green, Sky Bluer, Sky Blue, Silver, Light Gray, Experience Royale, Experience Green, Experience Blue, Desert Yellow, Desert Red, Desert Green, Desert Bluer, Desert Blue, Dark Star e Brown Sugar.

1. // Veja a figura 3 - ModelMat com Plastic3D L&F, tendo Dark Star como tema

2. PlasticLookAndFeel.setPlasticTheme(new DarkStar());

3. try {

4. UIManager.setLookAndFeel( new Plastic3DLookAndFeel());

nbsp;

5. } catch (UnsupportedLookAndFeelException ex) {

6. nbsp;

ex printStackTrace();

7.

}

Talvez o tema Dark Star seja mais apropriado para um aplicativo multimedia do que para uma ferramenta estatística. Na figura 4, o ModelMat usa o tema Desert Yellow.

Ficou interessante! Mas ainda há outras possibilidades, como o Experience Green, na figura 5.

O JGoodies Looks Demo permite experimentar as diferentes combinações de look and feels e temas.

Customização

Ajuste o estilo do cabeçalho para o JGoodies Looks definir a borda e efeito 3D mais apropriados. Se o aplicativo contar com as barras de menu e de ferramenta, a constante deve ser HeaderStyle.BOTH. Use HeaderStyle.SINGLE se o aplicativo tiver apenas uma barra de menu, ou uma barra de ferramenta.

1. JMenuBar menuBar = new JMenuBar();

2. menuBar.putClientProperty(Options.HEADER_STYLE_KEY, HeaderStyle.BOTH);

3. JToolBar toolBar = new JToolBar();

4. toolBar.putClientProperty(Options.HEADER_STYLE_KEY, HeaderStyle.BOTH)

Pode-se decidir especificamente pelo estilo de borda: BorderStyle.EMPTY, ETCHED ou SEPARATOR. O padrão é ETCHED.

1. toolBar.putClientProperty(PlasticLookAndFeel.BORDER_STYLE_KEY, BorderStyle.SEPARATOR);

2. menuBar.putClientProperty(PlasticLookAndFeel.BORDER_STYLE_KEY, BorderStyle.SEPARATOR)

Plastic L&F escolhe um pseudo efeito 3D por padrão, de acordo com o cabeçalho e do estilo da borda. Esse efeito 3D pode ser desabilitado.

1. menuBar.putClientProperty(PlasticLookAndFeel.IS_3D_KEY, Boolean.FALSE)

Há outras customizações possíveis, como ajustar o estilo de componentes JTabbedPane, JTree, JMenu, JTextArea, definir o tamanho padrão de ícones, o tamanho mínimo de botões, entre outros ajustes. Consulte a documentação em README.html para esses e outros detalhes.

Napkin

Napkin Look & Feel é destinado primordialmente à protótipos e softwares em desenvolvimento. É feito para lembrar esboços de interface gráficas (GUI) feitos em guardanapos, demonstrando que se trata de algo preliminar ou informal.

Napkin L&F está disponível sob a licença BSD.

Cenário

Imagine a seguinte situação, onde qualquer semelhança com a realidade não é mera coincidência.

Na fase de prototipação do software, ou durante a criação de GUI's, apresenta-se o software à gerência ou ao cliente como ele está no momento: aparentemente funcional, pela riqueza de detalhes na interface gráfica, mas incompleto.

Ao mostrar a interface gráfica do software, passa-se a impressão de que falta pouco para terminar o desenvolvimento, quando na verdade é o oposto. Passam-se os meses, mas o produto não fica pronto, então, surgem as cobranças: "Quando vai terminar?" "O que tem feito nesse tempo todo?"

Napkin Look & Feel ajuda a contornar essa situação.

Napkin in Action

Faça o download do Napkin L&F, adicione a biblioteca ao classpath do projeto e use o método setLookAndFeel(LookAndFeel laf), de UIManager, durante a execução de main para alterar o look and feel programaticamente.

1.

// Ver figura 6

 

2.

public static void main(final String args[]) {

3.

java awt EventQueue invokeLater( new Runnable() {

4.

public void run() {

5.

try {

6.

UIManager setLookAndFeel(new NapkinLookAndFeel());

7.

} catch (UnsupportedLookAndFeelException ex) {

8.

ex printStackTrace();

9.

}

10.

new ModelMat() setVisible( true);

11.

}

12.

});

13.

}

Substance

O objetivo do Substance L&F é prover um look and feel altamente configurável e customizável. Requer JDK 5.0 + e está disponível sob a licença BSD.

Substance é altamente configurável porque disponibiliza uma ampla gama de skins, temas, diferentes formatos de botões, watermarks. E é extensível porque fornece API para criar novos skins, temas, watermarks e assim por diante.

Características:

Diferentes skins - conjunto de temas, watermark e demais configurações previamente definidos

Inúmeros temas - conjunto de informações que permite obter uma interface consistente em diferentes estados visuais

Watermarks - imagens mostradas no fundo de uma interface gráfica Swing

Ícones nativos no JFileChooser

Alinhanhamento de itens no menu

Preciso micro-design

Fade animation effects

Sofisticadas CellRenderer's para JTable's, JTree's e JList's

Substance in Action

Faça o download do Substance L&F, adicione a biblioteca ao classpath do projeto e utilize o método setLookAndFeel(LookAndFeel laf), de UIManager, durante a execução de main para alterar o look and feel programaticamente.

1. try {

2. // Define o look and feel

3. UIManager setLookAndFeel( new SubstanceBusinessLookAndFeel());

4. // Escurece o tema

5. SubstanceLookAndFeel.setCurrentTheme( new SubstanceCremeTheme().shade(0.1));

6. // Define o watermark

7. SubstanceLookAndFeel.setCurrentWatermark( new SubstanceMetalWallWatermark());

8. // Ajusta a forma dos botões

9. SubstanceLookAndFeel.setCurrentButtonShaper( new ClassicButtonShaper());

10. // Gradient painters for buttons

11. SubstanceLookAndFeel.setCurrentGradientPainter(new WaveGradientPainter());

12. // Faz com que o watermark vaze (bleed) por componentes opacos, como JTextField's

13. // Note a área de texto da figura 7

14. UIManager.put(SubstanceLookAndFeel.WATERMARK_TO_BLEED, Boolean TRUE);

15. // Ajusta localização e quantidade de botões da bara de rolagem (scrolbar)

16. // Perceba na figura 7 que a scrolbar possui três botões

17.

UIManager.put(SubstanceLookAndFeel.SCROLL_PANE_BUTTONS_POLICY,

18.

SubstanceConstants.ScrollPaneButtonPolicyKind.MULTIPLE);

19.

} catch (UnsupportedLookAndFeelException ex) {

20.

ex.printStackTrace();

21.

}

22.

23.

// Mantém a JTable opaca, não deixando o watermark vazar (bleed)

24.

table.putClientProperty(SubstanceLookAndFeel.WATERMARK_TO_BLEED, Boolean.FALSE);

Existem watermarks padrões no Substance, mas qualquer arquivo de imagem pode servir como watermark.

1.

// Veja fig

8

2.

SubstanceLookAndFeel.setCurrentWatermark( new SubstanceImageWatermark(

3.

ModelMat.class .getResourceAsStream("/org/modelmat/resources/images/modelmat gif")));

4.

SubstanceLookAndFeel.setImageWatermarkKind(SubstanceConstants.ImageWatermarkKind SCREEN_TILE);

SCREEN_TILE); Um modo mais direto de configurar o L&F com o Substance

Um modo mais direto de configurar o L&F com o Substance é através das skins.

1. UIManager setLookAndFeel(new SubstanceBusinessLookAndFeel());

2. SubstanceLookAndFeel setSkin( new OfficeBlue2007Skin());

Substance & NetBeans

O artigo Spicing Up Your NetBeans IDE 5.0 with Substance mostra como alterar o look and feel do NetBeans para utilizar o Substance, usando um plugin desenvolvido por Kirill Grouchnikov. Esse plugin está disponível no nbextras.org.

Assim que o plugin estiver instalado, é fácil alterar o formato de botões e temas e adicionar marca d'água (watermark) personalizada. Todas essas opções estão disponíveis sob o menu view.

Mais Substance

Substance oferece grande quantidade de recursos para turbinar a interface gráfica de um aplicativo. Além das funcionalidades já citadas nesse artigo, merecem menção:

JButonStrip

JRibbon

Suporte para indicação visual de conteúdo não-salvo em frames

Suporte para indicação visual de conteúdo não-salvo em tabs

Strength checking on passwords

Auto-completion para comboboxes editáveis

Tab-overview dialog

E mais

Consulte o demo do Substance para conhecer melhor as possibilidades que esse L&F oferece para enriquecer a interface gráfica de um aplicativo.

Skin Look And Feel

Baseado na descrição no sítio do projeto,

Skin Look And Feel permite à desenvolvedores Java escrever aplicativos skinnable [i.e. que trocam de skins] utilizando o toolkit Swing. É capaz de carregar pacotes de temas (um conjunto de skins GTK ou KDE) para incrementar widgets de uma GUI. Skin Look And Feel (aka SkinLF) também inclui NativeSkin para criar irregular windows.

Requer ao menos JDK 1.3 e é distribuído sob a licença Skin Look and Feel License, baseada na licença Apache License. Themepack

SkinLF permite aos desenvolvedores empacotar temas GTK e KDE num arquivo Zip chamado themepack.Esse arquivo contém o tema GTK ou KDE e um descriptor em XML. Há vários themepacks disponíveis para download no Javootoo. Teste alguns através desse demo.

Para mais informações, veja Understanding Theme Pack Format.

SkinLF in Action

Há duas formas de utilizar o SkinLF diferentes: alterar o look and feel programaticamente e o modo Skinit.

Faça o download do SkinLF, adicione a biblioteca ao classpath do projeto e utilize o método setLookAndFeel(LookAndFeel laf), de UIManager, durante a execução de main para alterar o look and feel programaticamente.

1.

// Define o skin (i e, o theme pack)

2.

Skin theSkinToUse = SkinLookAndFeel.loadThemePack(

3.

ModelMat.class .getResourceAsStream("aquathemepack zip"));

4.

SkinLookAndFeel.setSkin(theSkinToUse);

5.

// Define o look and feel

6.

UIManager.setLookAndFeel(new SkinLookAndFeel())

Conversores de Temas

SkinLF tem como um de seus objetivos adicionar suporte a novos theme engines além do GTK e KDE nas próximas versões. Mas, nesse meio tempo, é possível converter um Microsoft Visual Style para um SkinLF themepack usando converters.

Um conversor irá converter (sic) um skin de formato específico para um theme pack usando GTK e KDE engines. Veja Converting a Microsoft Visual Style to a SkinLF themepack para entender como isso pode ser feito.

Native Skin

SkinLF provê aos desenvolvedores acesso à funcionalidades nativas do sistema operacional, como always on top, transparência e irregular windows.

Para informações adicionais, veja o tutorial A Clock using NativeSkin.

Contribua Você Também!

SkinLF requer desenvolvedores e escritores técnicos para corrigir bugs, criar documentação, entre outras tarefas. Para contribuir, registre-se no Java.net e junte-se ao projeto, ou participe da lista de discussões.

Considerações Finais

É recomendável fazer uso dos inúmeros look and feel's disponíveis, ao invés de desenvolver um L&F a partir do zero, pois trata-se de uma tarefa não-trivial, que requer conhecimento profundo sobre Swing, padrões de design de interfaces gráficas, entre outros.

Mesmo que o objetivo seja maximizar o valor do software utilizando uma interface gráfica diferenciada e sofisticada, a implementação de um look and feel próprio dificilmente será a melhor opção.

Todos os look and feel's mais sofisticados oferecem diversos recursos para customização, como temas e API's para alterar ou extender funcionalidades da bilbioteca.

Outros L&F's

O Javootoo mantém uma lista com vários L&F's, incluido livres, proprietários e até descontinuados.

Alguns look and feel's sacrificam a independência de plataforma, como o Office L&F, disponível apenas para a plataforma Windows, e o Quaqua, disponível apenas para Mac OS X. Para propósito de desenvolvimento, o Quaqua pode ser utilizado em sistemas operacionais que não o Mac OS X.

Há L&F's proprietários, como o JTattoo. Outros look and feel's livres dignos de nota são LiquidLnF e TyniLaF.

Pré-Visualização com o Look and Fell no NetBeans

O Update Pack for NetBeans 5.5 GUI Builder (Matisse) provê funcionalidades disponíveis no NetBeans 6.0 para o NetBeans 5.5. Entre essas funcionalidades está a pré-visualização com look and feel.

Veja Também

Rafael Fiume, formando pela FATEC (Faculdade de Tecnologia de São Paulo), é consultor, trabalha com desenvolvimento de softwares e gestão de negócios. Pretende, um dia, ser presidente dos Estados Unidos.

Pretende, um dia, ser presidente dos Estados Unidos. comentários: 0 Tópicos Relacionados  Como colocar uma

Tópicos Relacionados

Home Sobre Anuncie O JavaFree.org é uma comunidade java formada pela coolaboração dos desenvolvedores da tecnologia java. A publicação de artigos além de ajudar a comunidade java, ajuda a dar maior visibilidade para o autor. Contribua conosco.

JavaFree é um site do Grupo DevMedia

Contribua conosco. JavaFree é um site do Grupo DevMedia www.devmedia.com.br | www.javafree.org | www.mrbool.com |