Sei sulla pagina 1di 12

Artigo Java Magazine 21 - Leveza Extrema com Thinlet

Pgina 1 de 12

Home

Entenda o site

Revistas

Tecnologias

Cursos

Loja Virtual

Frum

Servios

Seja bem-vindo, Geovanny Silva Ribeiro!

Lanamento: Infra Magazine 1


Confira a primeira edio da revista sobre infra-estrutura, totalmente gratuita!

Voc tem acesso gratuito a este post. Se desejar compr-lo com Crditos DevMedia, clique aqui. d seu feedback post favorito

Artigo Java Magazine 21 - Leveza Extrema com Thinlet


Artigo publicado pela Java Magazine edio 21.

Compartilhar

Curtir

Cadastre-se para ver do que seus amigos gostam.

Esse artigo faz parte da revista Java Magazine edio 21. Clique aqui para ler todos os artigos desta edio

Ateno: por essa edio ser muito antiga no h arquivo PDF para download.Os artigos dessa edio esto disponveis somente atravs do formato HTML.

Leveza Extrema com Thinlet

http://www.devmedia.com.br/articles/viewcomp.asp?comp=10264

16/05/2011

Artigo Java Magazine 21 - Leveza Extrema com Thinlet

Pgina 2 de 12

Mais uma Alternativa para o Desktop Crie aplicaes visuais leves com Java e XML, mas sem Swing, com o toolkit livre Thinlet

sabido que a tecnologia Java vem ganhando espao no desenvolvimento desktop. Um dos motivos a liberdade que oferece para definir novos componentes ou estend-los e para criar aplicaes grficas fceis de manter, alm de realmente multiplataforma. Porm, um dos problemas da principal tecnologia Java para aplicaes locais, o Swing, sua curva de aprendizado relativamente grande, especialmente para os desenvolvedores acostumados com o "arrastar e soltar" de ferramentas como VB e Delphi. A API Thinlet se encaixa bem nessa lacuna.

O toolkit Thinlet uma API (ou toolkit) para a criao de interfaces grficas leves. Aplicaes Thinlet so baseadas essencialmente numa nica classe Java que processa a definio das telas, gerencia eventos e realiza a chamada lgica de negcio da aplicao. As telas so definidas de forma declarativa em arquivos XML que seguem o padro XUL (XML User Interface Language). Para quem tem facilidade com HTML e conhecimentos bsicos de XML, ser fcil aprender e usar a tecnologia. O site oficial do projeto, thinlet.com, disponibiliza um arquivo zip com aproximadamente 300 Kb, contendo o jar binrio, cdigo-fonte completo, aplicaes de exemplo e documentao. O projeto livre, sob licena LGPL. Depois de fazer o download da verso mais atual e descompactar o zip, coloque o arquivo thinlet.jar no classpath do seu sistema operacional (ou o acrescente como biblioteca sua IDE). Este jar tem apenas 38 kb e tudo o que necessrio para rodar suas aplicaes baseadas na tecnologia. Aplicaes Thinlet precisam apenas do JDK 1.1 e dispensam o Swing. Podem rodar como aplicaes ou como applets.

Componentes e definio XML A Thinlet implementa os componentes grficos mais comuns: PopupMenu, Label,

http://www.devmedia.com.br/articles/viewcomp.asp?comp=10264

16/05/2011

Artigo Java Magazine 21 - Leveza Extrema com Thinlet

Pgina 3 de 12

Button, CheckBox, ToggleButton, ComboBox, TextField, PasswordField, TextArea, TabbedPane, Panel, Desktop, Dialog, SpinBox, ProgressBar, Slider, SplitPane, List, Table, Tree, Separator e MenuBar. Estes seguem uma hierarquia semelhante do AWT: quase todos so extenses de uma classe Component, compartilhando as propriedades e o comportamento da classe pai. Nos arquivos de definio de telas, cada componente especificado por um elemento XML. Atributos determinam o estado inicial e a lgica de interao com o usurio dos componentes.

Primeiro programa com Thinlet Vamos pr as mos na massa. O primeiro exemplo (adaptado do site do projeto) muito simples: um contador com botes para decrementar, incrementar e zerar o valor atual. Primeiro devemos definir o XML de descrio da tela. Crie um arquivo contador.xml, com o contedo mostrado na Listagem 1. Vamos analisar o cdigo. A tag <panel> define um painel para agrupar e organizar os componentes, o valor de text define o texto exibido no painel e column divide o painel em colunas facilitando a disposio dos componentes. Os outros atributos definem caractersticas visuais, como espaamento entre componentes, bordas, fonte e margens. A tag <label> cria um texto no-editvel. O valor do atributo name, que est presente em todos os componentes, identifica o componente no cdigo Java. Um atributo inspirado no HTML o colspan, que define o nmero de colunas ocupado pelo componente. No exemplo o label tem colspan=3, portanto ir preencher trs colunas toda uma linha do painel. Outro elemento muito usado o <button>. O atributo text define o texto exibido boto, e action informa o mtodo Java a ser chamado quando o boto for clicado; o atributo weightx determina como o componente deve preencher o restante do espao horizontal disponvel ( o valor "1" faz com que seja usado todo o espao). E como no definimos um valor para colspan, cada boto um vai ocupar apenas uma coluna do painel. A tela j est definida. Agora precisamos exibi-la e programar a interao com o usurio. Devemos criar uma classe que estende thinlet.Thinlet. Veja seu cdigo

http://www.devmedia.com.br/articles/viewcomp.asp?comp=10264

16/05/2011

Artigo Java Magazine 21 - Leveza Extrema com Thinlet

Pgina 4 de 12

da Listagem 2. Observe que fizemos o processamento do XML de definio no construtor, chamando parse(), e adicionamos o objeto retornado (que representa a tela) prpria subclasse de Thinlet, que funciona como um controlador da aplicao. Os mtodos subtrair(), limpar() e somar() respondem aos eventos dos botes, conforme configurado no XML. Estes mtodos recebem uma referncia para o label. Utilizamos alguns mtodos herdados da classe Thinletpara manipular o label. O mtodo setString() atribui um valor string a um atributo e tem trs parmetros: um componente, o nome do atributo e o valor a ser atribudo. De forma anloga, o mtodo getString() retoma o valor de um atributo, dado um componente e o nome do atributo. A classe Thinlet oferece outros mtodos de manipulao de componentes. possvel adicionar ou remover componentes em tempo de execuo, inserir itens em listas, combos e rvores e definir o cone de componentes, entre outras operaes. Veja uma seleo desses mtodos na Tabela 1. Concluindo, note que no mtodo main() utilizamos a classe FrameLauncher, que responsvel por montar e apresentar a tela. Seu construtor recebe quatro argumentos: o ttulo da janela, o objeto controlador (uma instncia de Contador, no exemplo) e as duas dimenses da janela. J podemos rodar a aplicao. Veja o resultado na Figura 1.

Para rodar uma aplicao como applet use a classe AppletLauncher em vez da FrameLauncher

Mtodo add(Object) add(Object,Object)

Descrio Adiciona um componente tela. Adiciona o componente no segundo argumento ao componente indicando no primeiro.

find(String)

Procura e retorna um componente pelo nome.

http://www.devmedia.com.br/articles/viewcomp.asp?comp=10264

16/05/2011

Artigo Java Magazine 21 - Leveza Extrema com Thinlet

Pgina 5 de 12

Create(String)

Cria um componente definido pelo tipo informado (ex: create(item)).

getSelectedItem(Object)

Retorna o item selecionado de uma lista, combo ou rvore.

Tabela 1. Mtodos selecionados da classe Thinlet

Figura 1. Primeiro programa: Contador

Listagem 1. contador.xml: definio da teia do contador

<panel text="Contador" columns="3" border="true" font-"bold" top="4" left="4" bottom="4" right="4" gap="4">

<label name="label" text="0" alignment="center'" colspan="3" weighty="1" background="#000000" foreground="#ffff00" font="monospaced bold 24" /> <button text="Menos [-]" action="subtrair(label)" /> <button text="Limpar" action="limpar(label)" weightx-"1" /> <button text="Mais [+]" action="somar(label)" /> </panel>

Listagem 2. Contador.java

import java.io.*; import thinlet.*;

http://www.devmedia.com.br/articles/viewcomp.asp?comp=10264

16/05/2011

Artigo Java Magazine 21 - Leveza Extrema com Thinlet

Pgina 6 de 12

public class Contador extends Thinlet { private int valor = 0;

public Contador() throws IOException { Object tela = parse("contador.xml"); add(tela); } public void subtrair(Object label) { setString(label, "text", String.valueOf(--valor)); } public void limpar(Object label) { valor = 0; setString(label, "text", "0"); } public void somar'(Object label) { set String(label, "text", String.valueOf(++valor) ) ; } public static void main(String[] args) throws IOException { new FrameLauncher("Contador". new Contador(), 186, 96); } }

Indo alm Podemos utilizar a API Thinlet para produzir aplicaes com componentes mais sofisticados como listas, combos e rvores. A Figura 2 um exemplo de tela uma pouco mais elaborada, com uso de um SplitPane, uma lista, alguns labels, reas de texto e botes, alm de uma lgica mais complexa de interao com o usurio. A

http://www.devmedia.com.br/articles/viewcomp.asp?comp=10264

16/05/2011

Artigo Java Magazine 21 - Leveza Extrema com Thinlet

Pgina 7 de 12

Listagens 3 mostra o XML de descrio da tela. A implementao da lgica de interao est na Listagem 4. Observe que usamos mais alguns mtodos de Thinlet. O mtodo find() obtm um componente com o nome passado como argumento; o mtodo esttico create() permite criar um componente em tempo de execuo (no exemplo criamos um item para ser adicionado ao list).getSelectedltem() retorna o item selecionado, podendo ser usado no s em listas, mas tambm em combos e rvores. remove() (naturalmente) exclui um componente da tela. Com putProperty() podemos atribuir qualquer objeto a um objeto da tela, associando-o a uma propriedade. Isso pode ser til para relacionar um objeto a um item de uma lista ou ao n de uma rvore, por exemplo. O objeto atribudo pode ser recuperado com getProperty().

Figura 2. Cadastro simples com Thinlet

Listagem 3. contatos.xml: definio da tela de cadastro

<panel columns="1"> <splitpane divider="150" weightx="1" weighty="1"> <list name="lista" perform="exibir(this)"> </list> <panel columns="3" top="4" left="4" bottom="4" right="4" gap="4"> <panel colspan="3" columns="2" gap="4"> <label text="Nome: " /> <textfield name="nome" weightx="1" /> <label text=email: " /> <textfield name="email" weightx="1" />

http://www.devmedia.com.br/articles/viewcomp.asp?comp=10264

16/05/2011

Artigo Java Magazine 21 - Leveza Extrema com Thinlet

Pgina 8 de 12

</panel> <button name="adicionar" text="Adicionar" weightx="1" action="adicionar" /> <button name="limpar" text="Limpar" weightx="1" action="limpar(nome, email)" /> <button name="remover" text="Remover" weightx="1" action="remover()" /> </panel> </splitpane> </panel>

Listagem 4. Contatosjava: classe controladora da tela de cadastro.

import thinlet.*;

public class Contatos extends Thinlet { public static void main( String[] args ) throws Exception { new FrameLauncher("Contatos", new Contatos(), 400, 200); }

public Contatos() throws Exception { Object tela = parse( "contatos.xml" ); add( tela ); }

public void limpar( Object nome, Object email ) { setString( nome, "text", "" ); setString( email, "text", "" ); }

http://www.devmedia.com.br/articles/viewcomp.asp?comp=10264

16/05/2011

Artigo Java Magazine 21 - Leveza Extrema com Thinlet

Pgina 9 de 12

public void adicionar() { Object nome = find ("nome"); Object email = find("email"); if( getString(nome, "text")==null ll getString(nome, "text").length()<1 ll getString(email, "text")==null ll getString(email, "text").length()<1) { return; } Object lista = find("lista"); Object item = create("item"); setString( item, "text", getString(nome, "text") ); putProperty( item, "email", getString(email, "text") ); add ( lista, item); }

public void exibir (Object lista) { Object item = getSelectedItem( lista ); Object nome = find("nome"); Object email = find("email"); setString( nome, "text", getString(item, "text") ); setString( email, "text", (String) getProperty(item, "email") ); }

pubic void remover () { Object lista = find("lista"); Object item = getSelectedItem(lista ); if( item != null ) {

http://www.devmedia.com.br/articles/viewcomp.asp?comp=10264

16/05/2011

Artigo Java Magazine 21 - Leveza Extrema com Thinlet

Pgina 10 de 12

remove( item); } } }

Concluses Podemos fazer muito mais com a API Thinlet.Por exemplo, possvel dividir a aplicao em mdulos com telas relacionadas e definir uma classe de controle para cada mdulo. Usar internacionalizao outra possibilidade. H tambm add-ons criados por terceiros: por exemplo, com o Skinlet voc pode criar skins para suas aplicaes, e o add-on Scriptable Thinlet suporta a criao de scripts em Groovy, Python e JavaScript. Para conhecer outros add-ons e muitas aplicaes baseadas na tecnologia, veja a seo "Showcase" do site do projeto.

LINKS: thinlet.com Site oficial da Thinlet

groups.yahoo.com/group/thinlet Frum sobre a tecnologia Thinlet

thinlet.blog-city.com Blog oficial do projeto

mozilla.org/xpfe/xulref Referncia para o padro XUL 1.0, a tecnologia por trs da Thinlet

http://www.devmedia.com.br/articles/viewcomp.asp?comp=10264

16/05/2011

Artigo Java Magazine 21 - Leveza Extrema com Thinlet

Pgina 11 de 12

javamagazine.com.br/downloadsljmll/jmll-ddestro-thinlet.zip

Produtividade com Thinlets Os desenvolvedores de aplicaes Thinlet no precisam se preocupar em criar os XML de definio de telas mo. Dois editores visuais bastante funcionais esto disponveis: O ThinG (thing.sf.net) software livre (GPL); embora esteja na versao 0.1, j bastante funcional e suporta todos os componentes da Thinlet (exceto <bean>). O Theodore (carlsbadcubes.com/theodore) proprietrio. Tem visual mais aprimorado e algumas funcionalidades adicionais. Possui uma verso freeware, que limitada quanto ao nmero de elementos nos XML e s pode ser executada via Java Web Start.

Ambos os editores so criados com Thinlet e permite desenhar telas interativamente, gerando automaticamente o XML de definio; tambm geram cdigo esqueleto para ajudar na implementao da lgica das telas.

Editando telas visualmente com o ThinG e ao lado mostrando o XML gerado (em edio, um dilogo da prpria ferramenta)

0 COMENTRIO Nenhum comentrio foi postado - seja o primeiro a comentar!

http://www.devmedia.com.br/articles/viewcomp.asp?comp=10264

16/05/2011

Artigo Java Magazine 21 - Leveza Extrema com Thinlet

Pgina 12 de 12

cursos relacionados

posts em sequncia

ltimos do autor

ltimos do site

Introduo do Desenvolvimento Java para Web: JSP, JSTL e Sevlets Formao Java Bsico (20 horas) Desenvolvimento de aplicaes Java Web no Eclipse Desvendando o JPA Curso Preparatrio para a Certificao-Sun Certified Web Component Developer(SCWCD) Formao Java web Developer Dominando Firebird Curso JavaScript: Explorando as diferentes ferramentas fornecidas pelo JavaScript Curso Completo MySQL [Ver todos]

sobre
a DevMedia faz parte do grupo www.web-03.net

tecnologias
Delphi Java .net Banco de dados Mobile Ruby on Rails PHP ASP WebDesign Engenharia de Software Linux Scripting Automao / NFe / PAF-ECF Outros

servios

www.devmedia.com.br www.linhadecodigo.com.br www.javafree.org

Cadastre Sistema de Programa DevBo Programa Programa PayCo DevMedia Loja Publique

publicaes
ClubeDelphi Java Magazine .net Magazine easy Java Magazine easy .net Magazine webMobile Magazine SQL Magazine Engenharia de Software Infra Magazine
anuncie conosco | fale conosco - (21) 3382-5038

http://www.devmedia.com.br/articles/viewcomp.asp?comp=10264

16/05/2011

Potrebbero piacerti anche