eduardo guerra aplicações swing a jato

19
Eduardo Guerra http://swingbean.sf.net Aplicações Swing a Jato

Upload: internet

Post on 22-Apr-2015

116 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Eduardo Guerra  Aplicações Swing a Jato

Eduardo Guerra

http://swingbean.sf.net

Aplicações Swing a Jato

Page 2: Eduardo Guerra  Aplicações Swing a Jato

Apresentação do Palestrante

Eduardo [email protected]

• Formado em Engenharia de Computação pelo ITA em 2002.

• Mestre pelo ITA, no curso de Engenharia Eletrônica e Computação, na área de Informática em 2005.

• Faz o curso de Doutorado no ITA com previsão de término para 2010.

• Professor da Graduação do ITA e da pós-graduação ITA-Stefanini.

• Possui as certificações da Sun: SCJA, SCJP, SCWCD, SCBCD (1.3 e 5.0), SCJWSD, SCMAD e SCEA.

• Possui experiência como Arquiteto de Software nas plataformas Java SE, Java EE e Java ME.

• Editor-chefe e autor de vários artigos da revista MundoJava.

• Administrador dos projeto open-source SwingBean e Esfinge.

Page 3: Eduardo Guerra  Aplicações Swing a Jato

Objetivo

Apresentar a abordagem do SwingBean para a criação de interfaces gráficas a

partir de metadados de objetos, mostrando como ele pode aumentar a produtividade em aplicações desktop.

Page 4: Eduardo Guerra  Aplicações Swing a Jato

• Dificuldades em Aplicações Swing

• Geração de Telas por XML

• Abordagem SwingBean

• Um Exemplo Simples

• O que Mais o SwingBean Pode Fazer?

• Geração de Templates

• O Futuro do SwingBean

Agenda da Apresentação

Page 5: Eduardo Guerra  Aplicações Swing a Jato

Aplicações em Swing

A API Swing é extremamente flexível e cheia de recursos, permitindo muitas extensões e a construção de interfaces realmente independente de plataforma.

public class FixedSizeFilter extends DocumentFilter { public void insertString(...) throws BadLocationException { replace(fb, offset, 0, str, attr); } public void replace(...) throws BadLocationException { int newLength = fb.getDocument().getLength() - length + str.length(); if (newLength <= 30) fb.replace(offset, length, str, attrs); }}

Porém este mesmo fator torna seu uso complexo e pouco trivial. Veja o código para criar um filtro que limita um campo de texto em 30 caracteres:

Page 6: Eduardo Guerra  Aplicações Swing a Jato

Dificuldades do Swing

• Pelo fato do Swing ser projetado para ser multiplataforma, os componentes deve ser posicionados de forma relativa e não de forma absoluta como em outras plataformas.

• Em uma tela com muitos componentes, tratalhar com a posição relativa dos componentes é trabalhoso, principalmente quando uma tela muda (exemplo: acrescentar um novo campo).

• A flexibilidade dos componentes muitas vezes deixa a execução de simples tarefas de interface complexas e com a necessidade de criação de várias classes.

• Cada componente gráfico tem suas particularidades, tendo grandes diferenças no tratamento de eventos e na configuração de cada um, o que exige um grande conhecimento de toda API.

• A lógica de criação da interface acaba ficando misturada com a lógica de apresentação e de negócios, havendo um grande trabalho para recuperar os dados de formulários e tabelas para os objetos de negócio.

Page 7: Eduardo Guerra  Aplicações Swing a Jato

Abordagem Clica & Arrasta

• Mesmo clicando e arrastando a construção de interfaces ainda é trabalhosa, pois cada componente ainda precisa ser posicionado e configurado.

• Ao se trabalhar diretamente no código, muitas ferramentas deixam de reconhecer a interface e não se consegue mais a edição visual dela.

• Ainda existe o mesmo trabalho braçal de se ligar as interfaces gráficas nos objetos de negócio.

Page 8: Eduardo Guerra  Aplicações Swing a Jato

Geração de Interface por XML

Esta abordagem facilita a construção da interface e o posicionamento dos componentes, porém ainda deve ser feita a ligação entre a interface e os objetos de negócio e muitas vezes se perde flexibilidade na construção das telas.

<panel gap="4" top="4" left="4"> <textfield name="number1" columns="4" /> <label text="+" /> <textfield name="number2" columns="4" /> <button text="=" action="calculate(number1.text, number2.text, result)" /> <textfield name="result" editable="false" /></panel>

Surgiram vários frameworks que descrevem a interface utilizando um documento XML, para facilitar a construção das telas.

Page 9: Eduardo Guerra  Aplicações Swing a Jato

Abordagem SwingBean

O SwingBean é um framework que fornece componentes de interface menos granulares e que são configurados

com metadados de objetos de negócio.

O formulário dessa tela é apenas um componente de interface e não vários!

O SwingBean não gera telas completas a partir de documentos XML!!!

Page 10: Eduardo Guerra  Aplicações Swing a Jato

Metadados do SwingBean

<beanDescriptor><line>

<property name='nome' label='Canino' /></line><line>

<property name='raca'comboList='Yorkshire;Beagle;Basset;Poodle' />

<property name='numeroCanil'/></line><line>

<property name='dataDeNascimento' /><property name='temPedigree'/>

</line></beanDescriptor>

Os metadados do SwingBean são configurados por um documento XML e são bem simples (existem só 3 tipos de entidade).

Os tipos de dados são reconhecidos automaticamente e os componentes são escolhidos de acordo.

É feito o posicionamento e o redimensionamento nos componentes de forma automática.

Page 11: Eduardo Guerra  Aplicações Swing a Jato

Metadados do SwingBean

<beanDescriptor><line>

<property name='nome' size='20' uppercase='true' /></line><line>

<property name='raca' label='Raça'comboList='Yorkshire;Beagle;Basset;Poodle' colspan='3' />

<property name='numeroCanil' /><property name='telefone' mask='(##)####-####' colspan='2' />

</line><line>

<property name='dataDeNascimento' format='dd/MM/yyyy' /><property name='temPedigree' dlu='55' />

</line></beanDescriptor>

Outros atributos podem ser utilizados para customizar o comportamento e tamanho de cada componente.

Page 12: Eduardo Guerra  Aplicações Swing a Jato

Manipulando o Formulário

GenericFieldDescriptor descriptor = XMLDescriptorFactory.getFieldDescriptor(Cachorro.class,

"cachorroForm.xml","CachorroForm");JBeanPanel<Cachorro> panel = new JbeanPanel<Cachorro>( Cachorro.class, descriptor);

Criando um Formulário

panel.setBean(cachorro);Setando um Objeto

Cachorro cao = new Cachorro();panel.populateBean(cao);

Recuperando um Objeto

panel.cleanForm();

Limpando o Formulário

Page 13: Eduardo Guerra  Aplicações Swing a Jato

Tabelas no SwingBean

<beanDescriptor><line>

<property name='nome' /><property name='raca' /><property name='dataDeNascimento' /><property name='temPedigree' />

</line></beanDescriptor>

As tabelas também podem ser construídas com base nos metadados A única diferença no XML é que ele só pode ter um elemento <line>

Se não for colocado o atributo readOnly=”true”, os campos da tabela são editáveis de acordo com os mesmos componentes que o formulário utiliza.

Page 14: Eduardo Guerra  Aplicações Swing a Jato

Manipulando a Tabela

TableFieldDescriptor tabledescriptor = XMLDescriptorFactory .getTableFieldDescriptor(Cachorro.class,

"cachorroTable.xml","CachorroTable");BeanTableModel<Cachorro> model = new BeanTableModel<Cachorro>(tabledescriptor);JBeanTable table = new JBeanTable(model);

Criando a Tabela

model.addBean(cachorro);model.setBeanList(list);

Colocando Objetos

Cachorro cao = model.getBeanAt(5);List<Cachorro> list = model.getCompleteList();

Recuperando Objetos

Page 15: Eduardo Guerra  Aplicações Swing a Jato

O que mais o SwingBean faz?

• Validação dos dados e adequação dos componentes do formulário baseado nos metadados do XML.

• Criação de componentes avançados como lista duplas, lista de checkbox e imagens.

• Adição de eventos em componentes de interface.

• Possui um pequeno framework para criação de ações de interface.

• Configuração de combos dependentes em formulários e tabelas.

Page 16: Eduardo Guerra  Aplicações Swing a Jato

O que mais o SwingBean faz?

• Validação de dados em tabelas, colocando a linha não válida em vermelho e mostrando os erros como tooltip.

• Recuperação de dados inseridos, atualizados e excluídos em tabelas para sincronização com o banco de dados.

• Filtragem e ordenação de dados em tabelas.

• Criação de tabelas-árvore, com 3 opções para a regra de formação das árvores.

• Customização de aparência para todos os componentes.

Page 17: Eduardo Guerra  Aplicações Swing a Jato

Geração de Templates

O segredo da produtividade com o SwingBean está na criação de templates de telas, visto que o que muda de uma tela para outra normalmente é o que está definido

nos metadados em XML.

Trocando o XML do formulário e da tabela, poucas modificações precisam ser feitas para que se tenham telas genéricas.

As diferenças mais comuns podem ser parametrizadas e as específicas inseridas por herança.

Page 18: Eduardo Guerra  Aplicações Swing a Jato

Futuro do SwingBean

• Como o XML do SwingBean é um metadado do objeto e não uma descrição da tela, será implementado o uso de anotações para a geração das telas.

• Vários comportamentos do SwingBean não podem ser facilmente alterados (como a forma que o label fica em relação ao componente). Aos poucos esses fatores estão sendo flexibilizados, para que se possa extender o framework mais facilmente.

• Como o SwingBean trabalha com componentes voltados a objetos de domínio, já está em implementação um mecanismo de binding para que se tenha objetos sincronizados com formulários e listas sincronizadas com tabelas.

• O uso de templates pode ser feito, porém não existe nenhum pronto pelo framework para ser utilizado. Depois de implementado o binding, serão criados vários templates para que se possa agilizar o desenvolvimento.

Page 19: Eduardo Guerra  Aplicações Swing a Jato

Frase Final

Muitas pessoas preferem o SwingBean do que

ferramentas vizuais de edição de tela, devido a facilidade de reuso da lógica de interface.