Aplicação Linguagem de Programação Orientada a Objeto ALPOO 02 - Swing Prof. Msc Wanderley Gonçalves Freitas Agenda Telas de mensagem - apresentar as principais telas de mensagens Containers o conceito de interfaces gráficas Apresentar Swing e AWT Gerenciadores de layout FlowLayout ; BorderLayout ; GridLayout Componentes Apresentar os principais componentes existentes para a construção de uma interface gráfica Manipulação de eventos Listeners e eventos 1 de 53 2 de 53 Objetivo Capacitar o aluno a compreender os conceitos de orientação a objetos e sua utilização no desenvolvimento de interface gráfica(gui) de qualidade na linguagem Java utilizando alguns componentes básicos da biblioteca Swing. Os conceitos de orientação a objetos Conhecer o fundamentos da linguagem Java, como escopo das classes, declaração de variáveis, declaração de métodos, dentre outros conceitos básicos. Telas de mensagens 3 de 53 4 de 53 JOptionPane É utilizado para mostrar mensagens de diálogo para o usuário Permite: Mensagens solicitando entrada de dados Mensagens solicitando resposta à um questionamento Mensagens de informação São pré definidas em constantes da classe JOptionPane PLAIN_MESSAGE INFORMATION_MESSAGE ERROR_MESSAGE WARNING_MESSAGE QUESTION_MESSAGE Métodos de JOptionPane showmessagedialog() -apresenta uma mensagem showinputdialog() -solicita entrada de texto showconfirmdialog() -faz uma pergunta, com botões para Yes, No e Cancel Fica no pacote javax.swing 5 de 53 6 de 53 1
Métodos de JOptionPane Caixa de Entrada Métodos para criação de uma caixa de entrada: JOptionPane.showInputDialog(Component, Object) -> cria uma caixa com Yes/No/Cancel. Retorna um string com a resposta do usuário String nome = null; nome = JOptionPane.showInputDialog("Qual é o seu nome?"); 7 de 53 8 de 53 Caixa de Diálogo de Confirmação Métodos para criação de uma caixa de confirmação: JOptionPane.showConfirmDialog(Component, Object) -> cria uma caixa com Yes/No/Cancel. int resposta; resposta = JOptionPane.showConfirmDialog(null, O seu nome é wanderley?"); Retorna: JOptionPane.YES_OPTION - ( 0) ou JOptionPane.NO_OPTION (1) ou JOptionPane.CANCEL_OPTION (2) que são constantes de classe, tipo inteiro. Caixa de Mensagem Métodos para criação de uma caixa de entrada: JOptionPane.showMessageDialog(Component, Object) não retornam nenhum valor JOptionPane.showMessageDialog(null, Seu nome é wanderley"); int resposta; resposta = JOptionPane.showConfirmDialog(null, "O seu nome é " + nome + "?"); if (resposta == JOptionPane.YES_OPTION) { // resposta == 0 JOptionPane.showMessageDialog(null, "Seu nome é " + nome); } else { JOptionPane.showMessageDialog(null, "Seu nome não é " + nome); } 9 de 53 10 de 53 Roteiro de criação de interfaces gráficas Containers 11 de 53 1) instanciar os componentes de interface janelas, botões, campos de textos, etc 2) adicionar os componentes em containers como os componentes podem ser agrupados qual é o layout de diagramação 3) estabelecer o tratamento de eventos de interface o que deve ocorrer quando o usuário clicar um botão? como alterar o conteúdo de um componente quando um outro sofre alguma alteração? 12 de 53 2
Swing x AWT Swing X AWT: AWT é o conjunto original de componentes visuais de Java. É implementada sobre componentes nativos do sistema operacional. Programas Java rodando em diferentes plataformas possuem aparência diferente. Swing é uma extensão da AWT. Implementado inteiramente em Java. Swing possui a mesma estrutura que os componentes AWT. O pacote Swing apresenta componentes mais flexíveis. As classes Swing são parte de um conjunto mais genérico de capacidades gráficas, chamado de Java Foundation Classes (JFC). Swing Uma interface gráfica em Java é baseada em três elementos: Containers Servem para agrupar e exibir outros componentes. Layout Tem o objetivo de organizar os componentes GUI em um contêiner para fins de apresentação. Componentes São os botões, caixas de texto, barras de rolagem, labels, etc. Pacote javax.swing 13 de 53 14 de 53 Containers Todo programa que oferece uma interface gráfica vai possuir pelo menos um container de mais alto nível, que pode ser: JFrame: janela principal de um aplicativo JDialog: janela para diálogos JApplet: janela para Applets container de nível intermediáriol, que pode ser: Jpanel - Simplificam o posicionamento de outros componentes JScrollPane - Containers JFrame: Um objeto desta classe possui uma barra de título e características para receber menus e outros componentes. JDialog: Usada para definir janelas de diálogo para entrada de dados. Normalmente usada em resposta a uma opção de menu selecionada. Definida em função de um objeto JFrame. JApplet: Classe base para applets Java. É possível desenhar e adicionar menus e outros componentes em um JApplet. 15 de 53 16 de 53 Containers- Content Pane Todo container top-level contém indiretamente um container intermediário denominado contentppane Este content pane contém todos os componentes visíveis n GUI da janela (interface gráfica). Os containers são adicionados ao content pane usando um dos vários tipos de métodos add Exemplo: frame = new JFrame(...); label = new JLabel(...); frame.getcontentpane().add(label, BorderLayout.CENTER); JFrame possue um gerenciador de layout padrão, que é o BorderLayout representa uma janela do sistema nativo possui título e borda pode possuir menu JFrame 17 de 53 18 de 53 3
JDialog JApplet 19 de 53 20 de 53 modela um container sem decoração representa um grupo de elementos normalmente usado para estruturar a interface JPanel Gerenciadores de Layout 21 de 53 22 de 53 Gerenciadores de Layout Tem o objetivo de organizar os componentes GUI em um contêiner para fins de apresentação. Determina o tamanho e posição destes componentes no contêiner. Principais exemplos: FlowLayout, BorderLayout, GridLayout. LayoutManager é responsável pela a apresentação dos componentes se adapta quando do redimensionamento da janela. Tipos de Gerenciadores de Layout Nulo (Posicionamento absoluto) FlowLayout BorderLayout GridLayout 23 de 53 24 de 53 4
Flow Layout FlowLayout À medida que os componentes são acrescentados no container, eles são posicionados em uma linha da esquerda para a direita. O tamanho de cada componente do container é calculado através do seu tamanho preferido (getpreferedsize). Uma nova linha é automaticamente criada quando falta espaço na linha corrente. É o padrão do JPanel. 25 de 53 26 de 53 GridLayout GridLayout Componentes são colocados em uma matriz com um numero específico de colunas ou linhas. Cada componente ocupa exatamente uma célula da matriz. As células são preenchidas da esquerda para direita e do topo para a base. 27 de 53 28 de 53 Border Layout Border Layout Divide um container em cinco regiões: BorderLayout.CENTER BorderLayout.NORTH BorderLayout.EAST BorderLayout.SOUTH BorderLayout.WEST O programador especifica a área na qual um componente deve aparecer. 29 de 53 30 de 53 5
Os principais components do swing São as classes de componentes Swing. Possuem como base a classe JComponent Componentes A partir delas foram criadas inúmeras classes descendentes para construção de interfaces gráficas. 31 de 53 32 de 53 Alguns Componentes GUI Básicos JTable JLabel JTextField JButton JCheckBox JComboBox JList JFrame 33 de 53 34 de 53 JMenuBar, Jmenu, JMenuItem JMenuBar - O container de nível mais alto que pode armazenar menus. Jmenu - Um menu que é criado para mostrar os itens de menu. Menus podem conter outros menus. JMenuItem - Uma entrada em um menu, que pode ser clicado para disparar ações JMenuBar, Jmenu, JMenuItem JMenu JMenuBar JMenuItem 35 de 53 36 de 53 6
Exercício 1 Façam programas em Java que desenhem as seguintes telas com Jframe. Exercício 2 (a) (b) Usando apenas as classes JFrame, JPanel, JButton, JLabel, BorderLayout, GridLayout e FlowLayout, escreva um programa que, ao ser executado, exiba a tela ao lado. Não se preocupe com a funcionalidade do programa. Ou seja, o programa não deve responder aos cliques do usuário. (b) 37 de 53 38 de 53 Eventos: O que são? Manipulação de Eventos Tratamento de eventos(listeners e eventos) São ações dos usuários na interface gráfica. Quando uma ação é executada, eventos são gerados. Eventos são objetos que descrevem o que ocorreu. Existem diversos tipos de classes de eventos para descrever diferentes categorias gerais de ações do usuário. 39 de 53 40 de 53 Listeners e eventos listeners são definidos por interfaces e podem estar aptos a tratar mais de um tipo de evento quando um listener tem um de seus métodos chamados, ele recebe um parâmetro (objeto) que descreve o evento ocorrido existem classes para modelar diferentes grupos de eventos 41 de 53 Tratamento de Eventos As GUIs são baseados em eventos gerados pela interação do usuário. Por exemplo, mover o mouse, clicar no mouse, digitar um campo de texto, fechar uma janela, etc. Tanto os componentes AWT como Swing utilizam os tipos de eventos do pacote java.awt.event. Mas o Swing também tem seus próprios eventos no pacote javax.swing.event. Mecanismo de tratamento de eventos possui três partes: a origem do evento, o objeto evento e o ouvinte (listener) do ouvinte. O programador precisa: Registrar um ouvinte(listener) de evento no componente Implementar um método de tratamento de eventos. 42 de 53 7
Algumas interfaces mais utilizadas: ActionListener FocusListener KeyListener MouseListener WindowListener Tratamento de Eventos Tratamento de Eventos Quando um botão for pressionado, este evento será tratado pela implementação do(s) método(s) da interface ActionListener Cada interface listener de eventos especifica um ou mais métodos de tratamento de evento que devem ser definidos na classe que implementa a interface. 43 de 53 Observação : tratamento de eventos poder ser duas formas classe interna classe anônima 44 de 53 Tratamento de Eventos Classe Interna(Registro de listeners) Tratamento de Eventos Classe Anonima(Registro de listeners) 45 de 53 46 de 53 Usando apenas as classes JFrame, JPanel, JButton, JLabel, BorderLayout, GridLayout e FlowLayout, escreva um programa que, ao ser executado, exiba a tela ao lado. Faça com que o número que aparece no visor seja o número digitado no teclado numérico da aplicação. O botão send deve imprimir no console o conteúdo do visor e o botão end deve apagar o visor. Permita que a aplicação seja termina fechando-se a janela. Obs : tratamento de eventos : classe interna ou classe anônima Exercício 3 Interface de eventos listener Interface Listener Classe Adapter Métodos ActionListener ---------- actionperformed(actionevent) AdjustmentListener --------- adjustmentvaluechanged(adjustmentevent) ComponentListener ComponentAdapter componenthidden(componentevent) componentmoved(componentevent) componentrezised(componentevent) componentshown(componentevent) ContainerListener ContainerAdapter componentadded(containerevent) componentremoved(containerevent) FocusListener FocusAdapter focusgained(focusevent) focuslost(focusevent) ItemListener -------- itemstatechanged(itemevent) KeyListener KeyAdapter keypressed(keyevent) keyreleased(keyevent) keytyped(keyevent) MouseListener MouseAdapte mouseclicked(mouseevent) mouseentered(mouseevent) mouseexited(mouseevent) mousepressed(mouseevent) mouserealesed(mouseevent) MouseMotionListener MouseMotionAdapter mousedragged (MouseEvent) mousemoved(mouseevent) ------ textvaluechange(textevent) TextListener WindowListener WindowAdapter windowactived(windowevent) windowclosed(windowevent) windowclosing(windowevent) windowdeactivated(windowevent) windowdeiconified(windowevent) windowiconified(windowevent) windowopened(windowevent) Prof: Msc. Wanderley Gonçalves Freitas ALPOO 02 - Swing 47 de 53 48 de 53 8
Conclusões AWT e SWING permitem a construção de interfaces gráficas portáveis entre resoluções gráficas e plataformas Modelo de eventos Java é avançado e permite separação clara entre código de negócios e implementação API SWING é realmente OO e permite a construção de aplicações MVC Referências bibliográficas FAEMAN, Julio. Design Patterns Aplicados. Java Magazine, Rio de Janeiro, v. 3, n.20, p. 52 a 58, 2005.. FOWLER, Martin. UMl essencial : um breve guia para a linguagem padrão de modelagem de objetos. Tradução Vera Pezerico e Christian Thomas Prices. 3. ed. Porto Alegre : Bookman, 2005. GRADY, Booch; RUMBAUGH, James;JACOBSON, Ivar. UML, guia do usuário. tradução de Fábio Freitas da Silva. Rio de Janeiro: Editora Campus. 2000. JOHN, Metsker, Steven. Padrões de projeto em java. Porto Alegre: Editora Booklman. 2004. KAZUO, Jorge. Catálogo de Soluções : Padrões de projeto na arquitetura JE22. Java Magazine, Rio de Janeiro, v. 3, n.20, p. 12 a 13, 2005. LOZANO, Fernando. Padrões de Projeto e Classes de Negócio. Java Magazine, Rio de Janeiro, v. 3, n.20, p. 10 a 11, 2005. Cafeína. MENDES, Antonio. Arquitetura de software : desenvolvimento orientado para arquitetura. Rio de Janeiro: Editora Campus. 2002. QUATRANI, Terry. Modelagem visual rational rose 2000 e UML. Rio de Janeiro: Editora Ciência Moderna Ltda. 2001. Scott W. Ambler. The Elements of Java Style. Disponível em: http://www.ambysoft.com/books/elementsjavastyle.html />. Acesso em : 01/12/2008 ;Writing Robust Java Code <http://www.ambysoft.com/downloads/javacodingstandards.pdf/> Acesso em : 01/12/2008 49 de 53 50 de 53 Perguntas Obrigado Wanderley Wanderley.unip@gmail.com www.wg.pro.br 51 de 53 52 de 53 9