Aplicações Desktop:
Swing/SubMacroForms
Carlos Renato Alves Gouveia
Novembro/2008
Carlos Renato Alves Gouveia
• Especialista em Engenharia de Web Sites pela UFMS;
• Professor Universitário na área de Programação Java no curso de Tecnologia em Análise e Desenvolvimento de Software da Faculdade Estácio de Sá;
• Analista de TI da Companhia de Gás do Estado de Mato Grosso do Sul – MSGÁS, onde desenvolve
sistemas usando Java e Oracle, além de administração e virtualização de servidores Linux;
• Desenvolvedor colaborador do software livre Java
Tópicos:
• Desktop em Java? • Swing x SWT
• Produtividade no design
• Programando a lógica da interface
• Distribuindo a aplicação com Java Web Start • Visão geral do SubMacroForms
• CRUD no SubMacroForms
• Integração com JasperReports
Desktop em Java?
• Muito se fala de Java na web, no servidor, no backend...
E o desktop, cadê??
• Havia razões para isso:
– Problemas de performance – Dificuldade de distribuição
– Dificuldade de desenho das telas – Dificuldade de programação
Desktop em Java
• Problemas de performance resolvidos nas versões mais novas
• Distribuição resolvida com Java Web Start
• Desenho e programação resolvidas mais recentemente • Exemplos:
– Imposto de Renda multiplataforma
– Eclipse, IntelliJ IDEA, NetBeans, WebSphere Studio Application Developer (WSAD)
Swing x SWT
•
Existem algumas opções de APIs para
desenvolvimento desktop. Principais:
– Swing – SWT
•
Cada uma tem as suas características. É preciso
conhecer, comparar e analisar para escolher
Swing
•
Toolkit gráfico presente no JDK
•
Padrão, portado para todas as plataformas
•
Culpado pela má fama da lentidão do Java no
desktop por ser “emulado”
– Problemas de performance foram superados
•
Criticado por não ter aparência “nativa”
Swing
• Exemplos de aplicações:
– Imposto de renda multiplataforma
– NetBeans
– IntelliJ IDEA
SWT
•
Criado com o objetivo de usar os componentes
gráficos (widgets) de cada sistema operacional,
bem como sua aparência
•
Performance muito boa no Windows, varia muito
em outras plataformas
•
Desenvolvimento mantido pela Eclipse
Foundation
•
Exemplos:
– Eclipse
– WSAD
Quando usar?
• Mais uma questão de gosto do que uma resposta direta • Swing possui performance homogênea e é suportado
pela Sun
• SWT tende a ser mais rápido no Windows e é ligado aos componentes nativos
• Eu prefiro Swing porque é o padrão de Java, enquanto SWT é um projeto paralelo sem controle da Sun ou da comunidade Java
Produtividade no design
•
Antes não havia
•
Tudo feito na mão:
– Muito tempo perdido em design
– Qualidade do código dependia do desenvolvedor
– Maior flexibilidade
•
Bem-vindo a era das ferramentas de design:
– Matisse (NetBeans)
Matisse x VEP
•
Matisse:
– Mais intuitivo e completo por enquanto – Não permite editar o código
•
Visual Editor Project:
– Suporta SWT também
– “Interpreta” o código escrito, mas quando se perde, não há o que fazer...
•
“Mas eu não gosto do código que a ferramenta
gera...”
Programando a lógica da interface
•
Estudar a API gráfica e lidar com listeners,
models, jeitos diferentes de fazer as mesmas
coisas...
– Você programa pra web com servlets e JSPs nus e crus?
•
Use uma solução de alto nível; use um
framework de binding
– Ligam sua classe à interface gráfica de forma
padronizada
Distribuindo a aplicação com Java
Web Start
•
Como instalar e atualizar a aplicação cliente:
– Vou ter que ir instalar na máquina de cada usuário?
– E se quiser fazer upgrade da JVM? Ou usar uma versão específica?
– Não tenho como distribuir a aplicação; é muito grande pra banda que eu tenho
Distribuindo a aplicação com Java
Web Start
• Permite distribuir as atualizações da aplicação de forma simples
• Usuário clica no ícone e tudo funciona
• Permite distribuir apenas as classes modificadas através do versionamento dos jars da aplicação
• Permite distribuir uma versão específica de JVM, se necessário
• Resolve maior limitação na adoção da tecnologia desktop
Visando Geral do SubMacroForms
• É um módulo do SubMacro com o objetivo de gerar telas de cadastro baseadas em templates XML em um
ambiente desktop, utilizando Swing
• É necessário a inclusão de algumas tags no arquivo XML, responsáveis pela configuração, disposição e
comportamento dos componentes Swing na tela • É possível utilizar as bibliotecas JasperReports,
JFreeChart, JavaMail, iText, Poi, Jcalendar, etc. para enriquecer a aplicação
CRUD no SubMacroForms
• Plug-in integrado ao NetBeans com wizard para facilitar a criação dos arquivos XML para a geração das telas de cadastro/filtro, além de wizard para criação do projeto com a estrutura básica de classes e arquivos de
configuração
• Outras IDE’s ainda é necessário utilizar um wizard
externo, o SubMacroGen
• Desenvolvimento de telas padronizadas, extremamente rápido, inclusive Mestre/Detalhe
• Gerenciamento de Recursos de Usuários/Grupo de Usuários
CRUD no SubMacroForms
• Gerenciamento de Privilégios de Usuários
• Pouca codificação Java necessária, uma vez que já
existem vários tipos de validações de campos, máscara, tratamento de “eventos”, etc. nativos no SMF
• Fácil implementação de novos tipos de validações, máscaras, etc.
• Possibilidade de extender classe JFrameTab (classe que gera as telas de cadastro) para modificar layout e
Plug-in NB: Configuração dos
Campos
Plug-in NB: Configuração dos
Campos
Integração com JasperReports
• JasperReports: gerador de relatórios
• iReports: design visual para o JasperReports • iText: gerador de PDFs
• JFreeChart: montagem de gráficos, pode ser usado diretamente ou integrado com o JasperReports
• Poi: integração com pacotes Office e OpenOffice, para geração de documentos e planilhas
• Tela de cadastro do SMF com botão de impressão de relatório Jasper (é necessário informar o nome do arquivo Jasper nas configurações do XML)
Integração com JasperReports
•
JasperViewer Personalizado
•
Classe JImprimirTab com métodos facilitadores
para a geração do relatório (é necessário
informar apenas o arquivo Jasper e o
JRResultSetDataSource)
Integração com outros
Frameworks
• Envio de email via biblioteca JavaMail • Conexão a sites HTTP com HttpClient • Conexão a servidores de FTP
• Processamento de arquivos XML (ex. JDOM) • Criptografia e assinatura digital
• Integração com impressoras fiscais (ex. Bematech)
• Integração com bancos (geração de boletos, arquivos remessa e retorno)
• Integração com operadoras de cartões de crédito e débito
Integração com outros
Frameworks
• Hoje, estamos em fase de estudo de outros frameworks para futuras integrações:
– JavaDesktop (https://javadesktop.dev.java.net)
– Mogwai SwingFramework (http://mogwai.sourceforge.net) • Submacro:
– https://submacro.dev.java.net – http://submacro.intersite.com.br