Programação Gráfica em Java Swing Aula 06 Na aula passada vimos: • Thread • Animação • Técnica de desenho eficiente (double-bufferring) 2 O que você deve ter fixado: • Formas de se implementar um fluxo paralelo de execução • Passos básicos de uma animação • Animação como monitoramento de estado 3 O que você deve ter fixado: • Diferenças entre animação automática e por solicitação do usuário • Diferença entre buffer simples e duplo • Uso do método update em animações: manter ou não a imagem anterior? 4 Na aula de hoje veremos: • Swing: • Por quê Swing • Estratégia MVC (model-view-controller) • Componentes AWT - semelhantes • Contêineres • Novos componentes do Swing 5 Swing... what? • Kit de ferramentas para construção de interfaces gráficas com o usuário • É parte da JFC (Java Foundation Classes) – – – – – AWT Swing Acessibilidade Api 2D Drag-N-Drop • JFC é a parte maior (e mais complicada) da plataforma Java padrão 6 Swing... how? • Componentes swing, de modo geral não devem ser usados com componentes AWT • Componentes “pesados” sempre se sobrepõem aos componentes “leves” • Programas que utilizam Swing aproveitam a infra-estrutura não visual do AWT – modelo de eventos, gerenciador de leiaute e etc. MixPopUpTest.java 7 Swing... why? • Portabilidade • Peso leve == maior eficiência • Independência do comportamento nativo • Facilidade para criação de GUI complexa 8 Model View Controller • Separação do modelo (dados) + • Separação da visão (apresentação) + • Separação do controle (comportamento) = • Aplicações de fácil manutenção e criação de componentes reutilizáveis mvc.view.CadastroPessoa.java 9 A Visual Index to the Swing Components arquivo 10 AWT - semelhantes • Swing tem similares a todos os componentes AWT • Todos são precedidos pela letra ‘J’ • Todos têm comportamento semelhante à implementação AWT – AWT e Swing possuem uma hierarquia paralela QuickChange.java 11 Contêineres • JWindow • JFrame – Notar a existência do método: setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); • Japplet – Apresenta diferenças importantes da classe Applet • JComponent 12 Contêineres • Todo container de alto nível possui um painel de conteúdo • O painel de conteúdo (content pane) deve conter todos os componentes visíveis da GUI • As barras de menu são a exceção a essa regra SwingApplication.java 13 Usando contêineres • Normalmente, acessamos o painel de conteúdo, configuramos o seu gerenciador de leiaute e adicionamos os componentes • Porém existem várias camadas de um contêiner que o programador poderia desejar acessar – Não entraremos em detalhes mas, como curiosidade veja a próxima figura 14 Hierarquia de Contenção Dica: para ver a hierarquia de contenção de um frame ou dialog do Swing, clique em sua borda para selecioná-lo, então pressione ctrl-shfit-f1 e 15 veja o resultado na saída padrão do sistema. Leiaute • Swing oferece um notável gerenciador: BoxLayout • Cria apenas linhas ou colunas de componentes • Altamente flexível e simples • Pode ser usado como alternativa ao GridBagLayout ListDialog.java 16 A classe Box • É um painel que implementa o BoxLayout por padrão • Não é possível modificar o leiaute de um Box • Possui vários métodos de conveniência para o uso do BoxLayout MixPopUpTest.java 17 Conversão AWT-Swing... why? • Maior número de componentes e funcionalidades • Componentes swing continuarão melhorando • Têm acessibilidade implementada por padrão ImageSequence.java 18 Sempre Swing ? • É razoável usar AWT se: • Você sabe (ou imagina) que seus usuários não dispõem de browsers atualizados • Se você quiser que todo internauta possa visualizar seus applets • Se você não espera que seus usuários possuam versões modernas do JDK, ou do Java Plug-in 19 O que você precisa saber... • Diferenças entre AWT e Swing • Acessar o painel de conteúdo dos contêineres Swing • Implementar MVC 20 O que você precisa saber... • Usar BoxLayout • Quando usar AWT • Converter uma aplicação AWT para Swing 21 Na próxima aula veremos: • Applet 22