terça-feira, 20 de maio de 2008

Uma pequena análise da LWUIT

Ola pessoal!!

Essa semana eu tive a oportunidade de escrever um artigo sobre essa interessante biblioteca e para ilustrar o artigo acabei montando uma aplicação de exemplo e então consegui tirar algumas conclusões e vou dar algumas opiniões aqui para vocês! :)

Nova forma de programar
Como os próprios autores declararam no site do projeto, a LWUIT foi feita pensada no Swing, então a forma de utilizar alguns componentes é bem parecida com seus "similares" no Swing, como por exemplo um Button. Abaixo, um exemplo onde se cria um botão e define a chamada de um método estático qualquer quando um botão é clicado:

Button botao = new Button("Processar");
botao.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt) {
//chamada para um método qualquer...
}});
Para alguns que não possuem muita vivência com Swing (como é o meu caso), algumas coisas podem soar estranhas, mas considero ser apenas questão de costume pois apesar de diferente são bem simples.

Novos recursos interessantes
Algumas das principais funcionalidades que o LWUIT oferece, podem ser consideradas como novas versões de funcionalidades já existentes no pacote javax.microedition.lcdui. Porém, a biblioteca traz algumas novidades como por exemplo: caixa de diálogo, abas, transição entre telas, novas opções de fonte, criação de temas. Além de automatizar (facilitando também é claro) alguns comportamentos, como por exemplo o scrol de uma tela.
Acima imagens retiradas da aplicação demo fornecida pelo projeto.

Estabilidade
É claro que por se tratar de um "lançamento" ainda há alguns pequenos ajustes a serem feitos. Como é o caso do TabbedPane que aceita um Component como paramêtro e então, eu resolvi criar um Form com diversos componentes e colocar esse Form dentro de uma aba. Compilou, executou e foi exibido corretamente, mas quando tentei usar não conseguia entrar na aba que eu queria e a navegação pelas abas ficava completamente perdida.
O que fazer então? Mandei um e-mail na lista de users do projeto e recebi a resposta de que realmente isso não funciona, e que eles iriam colocar uma exception de illegalargument no caso de alguém tentar fazer a mesma coisa, já que eu não era o primeiro a perguntar sobre isso.
Enfim, a melhor coisa a fazer é entrar em contato com o pessoal e repassar os problemas e assim ajudarmos a biblioteca a evoluir!!

Ferramenta deskotp
Como dito antes, é possivel se criar temas para o LWUIT e isso é feito através de uma aplicação desktop bem simples de usar, onde você vai configurando cada tipo componentes a ser utilizado e seu estilo. Permitindo assim um alto nivel de acabamento da sua aplicação.

Performance
É claro que a performance em alguns casos deixa a desejar, porém isso acontece principalmente se você sobrecarregar sua aplicação com tudo que o LWUIT lhe oferece. Mas você pode fazer a mescla de componentes LWUIT e componentes high level.
Por exemplo: Pode ser feito um menu utilizando um Form com o Layout grid e com diversos botões, e após isso, utilizar os forms (ou lists) comuns e sua aplicação continuará "leve".

Conclusão
É uma biblitoeca que me surpreendeu, assim como a mais pessoas, e que com certeza colaborará com a melhoria da qualidade das interfaces e na facilidade do desenvolvimento. Mas, deve ser utilizado com muito cuidado, pois pode comprometer a sua aplicação. Tente sempre testar em dispositivos reais para ter uma noção desse comprometimento. E é claro, contribua enviando sugestões e notificando possiveis bugs. Pois assim, ela vai sendo "polida" e cada vez mais melhorada!

E atenção, estou preparando um menu utilizando um Form com Button e que teria o comportamento similiar a um menu que publiquei a muito tempo atrás aqui e que é o post mais acessado. E assim, poderemos comparar a facilidade e agilidade no desenvolvimento. Aguardem!!!

[]s
Neto

7 comentários:

Marcelo Carvalheiro disse...

Olá,
Comecia a mexer um pouco com o LWUIT, só que não estou conseguindo rodar aquele exemplo de hello world. quando executo no eclipe dá ava.lang.NoClassDefFoundError, vc sabe dizer por que?

Obrigado

Everton disse...

Como você instalou o Lwuit? poderia me passar um tutorial?
Obrigado :)

Thiago Bruno Melo de Sales disse...

Olá Neto. Eu também estou tendo o mesmo problema com o NoClassDefFoundError no eclipse. Apenas import o .jar via "properties" do projeto no eclipse. Tens idéia do que pode ser?

vlw!

Thiago Bruno Melo de Sales disse...

Olá Neto. Finalmente consegui "consertar" o problema. No Java Build Path, na aba Order and Export, o .jar do LWUIT deve estar selecionada.

Vlw!

Thiago Bruno Melo de Sales disse...

Gostei dos exemplos postados... te convido para visitar nosso grupo "Efforts" da UFCG, o qual foca estudos de tecnologias para computação embarcada, tais como JavaME, PyS60, WRT, FlashLite, Maemo, Symbian-OpenC, etc! Acessa ae:

http://efforts.embedded.ufcg.edu.br/

[]'s

Unknown disse...

Olá!
Estou começando a usar a LWUIT em um projeto aqui. E que eu estou tendo o mesmo problema do Thiago. Já acrecentei o lwuit.jar no Order and Export, mas não resolveu.
O engraçado é que no j2mewtk funciona...
Tem alguma idéia do que pode ser?

Winex Sistemas disse...

Olá a todos, gostaria de saber como faço para rodar esse exemplo em palm zire22, já tentei converter para prc com a ferramenta do j2me jartoprc_w mas não abre no palm dá sempre uma mensagem de erro ao sincronizar.


obrigado.