Aplicações Desktop: Swing/SubMacroForms Carlos Renato Alves Gouveia Novembro/2008 [email protected] 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 Framework SubMacro. 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 Integração com outros Frameworks 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) – Azureus (client Torrent) 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 corretamente 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” – Melhoras significativas, especialmente no Java 6 Swing • Exemplos de aplicações: – – – – Imposto de renda multiplataforma NetBeans IntelliJ IDEA Ferramentas da Oracle 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 – Azureus 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) – Visual Editor Project (Eclipse) 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...” – E você olhava os forms do VB e do Delphi? 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 – Só se preocupe com a lógica de interface 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 • Há solução... 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 comportamento Plug-in NB: Criando Projeto Plug-in NB: Conexão JDBC Plug-in NB: Escolha da Tabela Plug-in NB: Configuração do Form Plug-in NB: Configuração dos Campos Plug-in NB: Configuração dos Campos Tela de Cadastro SMF Tela de Filtro SMF 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) Exemplo de Relatório Exemplo de Relatório com Gráfico 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