Você está na página 1de 23

Tópicos de Desenvolvimento

Java Desktop
Roger Araújo
Analista de Sistemas
PETROBRAS – Petróleo Brasileiro S/A
Sobre mim...
• Bacharel em Ciências da Computação pela
Universidade Federal do Ceará
• Pós-graduado em Desenvolvimento de Sistemas
Corporativos pela FARN
• 15 anos de experiência em Informática, com
ênfase em programação Desktop
Por que programação Desktop?
• A Web não resolve tudo?
• As 8 Falácias da Computação Distribuída, segundo
Peter Deutsch:
▫ A rede é confiável
▫ A latência é zero
▫ A largura de banda é infinita
▫ A rede é segura
▫ A topologia não muda
▫ Existe um administrador
▫ O custo de transporte é zero
▫ A rede é homogênea
• “The right tool for the job”
Vantagens do Desktop (antes de HTML5...)

• Acesso ao sistema de arquivos


▫ Leitura e gravação de grandes volumes de dados
• Acesso à memória RAM
▫ Gigabytes à sua disposição
• Uso de threads
▫ Múltiplas threads em múltiplos núcleos em múltiplos
processadores
• Recursos do processador e periféricos
▫ Instruções matemáticas complexas e execução
paralelizável
▫ GPU’s
Desvantagens do Desktop
• Distribuição
▫ Cada usuário precisa de uma cópia local (mas existem
alternativas...)
▫ Pirataria
• Tráfego de rede
▫ Não abuse: leia por etapas, grave apenas o que mudou
• Coerência de cache
▫ Se a aplicação não é centralizada, o cache também não
pode ser
▫ Tempos de expiração curtos para evitar dados
desatualizados
Frameworks Desktop para Java
• AWT – Abstract Windowing Toolkit
• Swing
• SWT – Standard Widget Toolkit
• LWUIT – Lightweight UI Toolkit (dispositivos
móveis)
• Qt Jambi
• Amino (base da ferramenta de desenho vetorial
Leonardo)
Swing – um pouco de história
• AWT – Abstract Windowing Toolkit
▫ “Ponte” entre a plataforma Java e recursos de
interface da plataforma subjacente
▫ Tecnicamente limitado, visual datado
Swing – um pouco de história
• Swing
▫ Independente da interface da plataforma
subjacente, baseado no conceito de look-and-feel
(aparência e comportamento)
▫ Até Java 1.4: visual limitado e desempenho fraco
▫ Java 1.5: melhorias modestas no visual e no
desempenho
▫ Java 1.6: melhorias significativas no visual e no
desempenho, GroupLayout, SwingWorker, novo
look-and-feel (Nimbus), integração aos recursos
nativos da plataforma, preparação para JavaFX
Swing – Elementos fundamentais
• MVC (Model-View-Controller): separação de
responsabilidades (na maior parte do tempo...)
• Gerenciadores de Layout: garantia de
consistência na disposição visual e
redimensionamento
• EDT – Event Dispatching Thread, ou “a thread
da discórdia”
• Look-and-Feel: banho de loja com apenas uma
linha de código
Swing - MVC
• MVC (Model-View-Controller) permeia todos os
componentes do Swing
• JTable
▫ TableModel: getModel()
▫ TableColumnModel: getColumnModel()
▫ ListSelectionModel: getSelectionModel(),
getColumnModel().getSelectionModel()
• JComboBox
▫ ComboBoxModel: getModel()
Swing – Gerenciadores de Layout
• Definem o tamanho, a disposição visual e a
política de redimensionamento dos
componentes gráficos
• Quando bem usados, garantem interface
consistente em praticamente qualquer ambiente
operacional
• Mas tudo tem seu preço...
Swing – Layout visual
• NetBeans
▫ Suporte aos layouts padrão do Java
▫ GroupLayout: projeto Matisse
• JFormDesigner
▫ Apenas design visual
• Google WindowBuilder Pro (antigo
Instantiations Swing Designer)
▫ Design visual e interpretação de código
preexistente
Swing – Layout manual
• GridBagLayout
▫ Altamente configurável, mas também altamente
propenso a erros
▫ Histórias de horror: “Totally GridBagLayout”
 http://madbean.com/anim/totallygridbag/
• FormLayout
▫ Divisão em células, com possibilidade de “span”
• MigLayout
▫ Altamente flexível e rico em recursos
▫ Configurado através de String’s ou chamadas de API
Swing – EDT
• EDT – Event Dispatching Thread
• *TODA* manipulação de componentes visuais ou
atualização de interface deve ocorrer dentro da EDT
• Para não “congelar” a interface, tarefas
potencialmente demoradas devem ser executadas
em threads separadas da EDT
• Como notificar a EDT?
▫ javax.swing.SwingUtilities.invokeLater()
▫ java.awt.EventQueue.invokeLater()
• SwingWorker: boa opção para executar tarefas
demoradas que precisem emitir notificações
intermediárias
Swing – Look-and-Feel
• Aparência e comportamento configuráveis em
tempo de execução
• Exige apenas uma linha de código:
▫ UIManager.setLookAndFeel(“nome da classe”);
Swing – Look-and-Feel
• Metal (Ocean)
▫ Look-and-Feel multiplataforma, padrão do Swing
• System
▫ Visual nativo do ambiente operacional
• Nimbus
▫ Visual moderno, disponível a partir do Java 1.6.10
• Substance
▫ Suporte a temas e efeitos de animação
• Cézanne
▫ Visual atraente, suporte robusto a internacionalização
Swing - Componentes
• JIDESoft
▫ JIDE Common Layer: gratuito, código aberto
▫ JIDE Components, Grids, etc: pagos, código pode ser
obtido sob licença
• SwingX
▫ Gratuito, código aberto
• Flamingo
▫ Interface “Ribbon”: Java com visual do Office 2007
• JFreeChart
• JasperReports
Swing – Aplicativos notáveis
• NetBeans Platform
▫ Baseado em módulos “plugáveis” (e compatível
com OSGi a partir da versão 6.9)
▫ Recursos de “docking” e ações dependentes de
contexto
▫ Componentes especializados
▫ Recomendado para aplicações de média e alta
complexidade
 http://platform.netbeans.org/screenshots.html
• Limewire
▫ “Swing para as massas”
Swing – WebStart
• Aplicações distribuídas via Web
▫ Instalação e atualização transparente de
aplicações
▫ Sistema de compressão Pack200
▫ Download automático da Máquina Virtual Java
▫ Imposição de versão mínima da Máquina Virtual
Java
▫ Suporte a assinaturas digitais para habilitar acesso
a recursos
JavaFX
• Plataforma para RIA’s (Rich Internet
Applications)
• Multiplataforma: Windows, Linux, Macintosh,
Solaris, Celulares, TV’s
• Concorrentes: Flash/Flex/Air, Silverlight, Ajax &
HTML5(?)
JavaFX – Java Store
• Java Store: loja virtual de aplicativos, criada em
JavaFX
• Permite publicar aplicativos criados em
qualquer linguagem suportada pela Máquina
Virtual Java
• Distribuição e cobrança a cargo da SunOracle
• Futuro incerto...
Referências
• http://download.oracle.com/javase/tutorial/uiswing/
• http://www.eclipse.org/swt/
• https://lwuit.dev.java.net/
• http://qtjambi.sourceforge.net/
• http://www.leonardosketch.org/amino/
• http://www.jonathangiles.net
• http://www.pushing-pixels.org
• http://www.javadesktop.org
• http://www.javafx.com
Fim

Muito obrigado!

Roger Araújo
roger_rf@yahoo.com.br

Você também pode gostar