Baixe o app para aproveitar ainda mais
Prévia do material em texto
Linguagem de Programação Fabiano Gonçalves dos Santos Aula 8 Conteúdo • Apresentar os conceitos de Listener e os tratamentos de eventos • Apresentar os conceitos de Adapters que implementam as interfaces de eventos • Utilizar interfaces gráficas interagindo com objetos e classes previamente definidos com Listeners e Adapter; 2 • Evento pode ser considerado como o resultado da interação do usuário com algum componente GUI: • Mover o mouse, clicá-lo, digitar num campo de texto, selecionar um item de menu, fechar uma janela, clicar num botão, etc. são interações que enviam eventos para o programa, normalmente realizando serviços. Eventos 3 • Eventos também podem ser gerados em resposta a modificações do ambiente. Em outras palavras, define-se eventos GUI como mensagens (chamadas a métodos) que indicam que o usuário do programa interagiu com um dos componentes GUI. • Um sistema orientado a objetos é definido como um conjunto de objetos interagindo ou trocando mensagens. Os eventos representam as ações dos atores neste processo ou alguma resposta a uma mudança de estado. Eventos 4 • Quase todos os componentes propagam eventos. Estes eventos devem ser tratados em algum ponto do código da aplicação. • Os eventos nunca são tratados no próprio componente (dado que não se tem acesso ao código do componente). • Para ligar o código do tratamento de eventos ao componente existem, no Java, um conjunto de interfaces chamadas listeners. Tratamento de eventos 5 • Um listener é uma interface que especifica os métodos que uma aplicação deve ter para ser notificada da ocorrência de um determinado evento. • Os componentes que geram eventos permitem que sejam adicionados ou removidos listeners em qualquer altura. Tratamento de eventos 6 • O modelo de eventos do Java funciona da seguinte forma: – O componente que produz eventos possui métodos especiais do tipo addXXListener(XXListener) que permite adicionar ou remover listeners. XX representa o nome do evento. O método addXXListener recebe por parâmetro o objeto que implementa a interface XXListener; Tratamento de eventos 7 – A implementação do método addXXListener no componente apenas adiciona o objeto passado por parâmetro a uma lista interna. Sempre que ocorrer um evento (ex. botão pressionado), o componente percorre a lista e invoca, para cada elemento, o método definido na interface XXListener. Tratamento de eventos 8 • São elementos ou componentes que não permitem conter outros elementos. • No exemplo seguinte é construída uma GUI simples com um botão e uma caixa de texto. Sempre que o botão é pressionado a aplicação deve escrever na caixa de texto um número inteiro aleatório. Para processar os eventos é necessário analisar os eventos que o botão produz. É preciso saber que sempre que um botão é pressionado é criado um evento do tipo ActionEvent. Tratamento de eventos 9 • Para adicionar listeners, a classe que representa o botão (JButton) possui um método chamado addActionListener que recebe por parâmetro um objeto que implemente a interface ActionListener. Na API vê-se que a interface ActionListener especifica um método chamado actionPerformed. Tratamento de eventos 10 • ActionEvent – evento gerado pelo botão quando pressionado. Sempre que o botão for pressionado, este irá percorrer a sua lista interna de listeners, chamando para cada um, o método actionPerformed; • ActionListener– interface que especifica os objetos que tratam eventos do tipo ActionEvent; Existem várias soluções possíveis para tratar o evento: – Recorrendo à própria classe (GUI) – a aplicação gráfica tem de implementar os listeners necessários; Resumindo 11 – Recorrendo a classes locais – é criada uma classe local que implementa os listeners necessários; – Recorrendo a classes internas – é criada uma classe dentro da GUI. A classe interna implementa os listeners necessários; – Recorrendo a classes anônimas – criam-se classes anônimas que implementem os listeners dos eventos a tratar. As classes anônimas são classes internas especiais; Resumindo 1) Utilizando a própria classe 2) Utilizando uma classe local 3) Utilizando uma classe anônima 12 13 • Utilizando a própria classe: – EventosGUI_1.java • Analisando o código, vê-se que é implementada a interface ActionListener. Isto é necessário porque o evento está sendo tratado na classe que representa a GUI. Utilizando a própria classe - Concluindo 14 • Ao indicar que a classe implementa a interface, será necessário implementar o método actionPerformed. Este método irá conter o código responsável pelo tratamento do evento. Contudo, para isto tudo funcionar é necessário que a classe diga que está interessada em receber eventos do botão. A classe declara que está interessada em receber eventos, invocando o método addActionListener do botão. A partir deste momento, sempre que o botão for pressionado, este chama o método actionPerformed da aplicação gráfica. Utilizando a própria classe - Concluindo 15 • Em resumo: – Declara-se a implementação do listener apropriado (implements XXListener); – Implementa-se o(s) método(s) do listener (a lista de métodos varia de evento para evento); – Registra-se no componente (addXXlistener). Utilizando a própria classe - Concluindo 16 17 • Utilizando uma classe local – EventosGUI_2.java – TrataEvento.java • Em relação à abordagem anterior, utilizando uma classe local deixa-se de indicar que a interface gráfica implementa a interface ActionListener e deixa de ser necessário guardar o atributo referente à caixa de texto. Mas foi necessário criar uma classe local (não se coloca nenhum modificador) e guardar nessa classe a informação necessária para tratar o evento. Guarda-se uma referência para a caixa de texto onde escreve-se (passada no construtor) e cria-se um gerador de números aleatórios (deixou de pertencer à classe da aplicação gráfica). Utilizando uma classe local- Concluindo 18 • A classe local tem de implementar a interface ActionListener. Assim, o método actionPerformed passou para esta classe. A classe da aplicação gráfica apenas tem de criar uma instância da classe local e registrá-la nos botões que criou. A vantagem desta abordagem é que permite separar o código da aplicação gráfica do código que trata os eventos. Utilizando uma classe local- Concluindo 19 20 • Utilizando uma classe anônima – EventosGUI_4.java • A utilização de classes anônimas para tratar os eventos pode parecer complexa e pouco clara. • É a mais eficiente quando o código que trata o evento é pequeno ou quando possuímos muitos componentes. Apesar do exemplo anterior utilizar duas classes anônimas, nada impede que se utilize a mesma classe anônima para tratar os eventos de diversos componentes. A única restrição na utilização deste tipo de classes tem a ver com o fato de que todas as referências utilizadas dentro da classe têm de ser finais ou atributos da própria classe. Classe anônima - Concluindo 21 • As classes anônimas são muito utilizadas para implementar localmente interfaces. A sintaxe típica para a construção de uma classe deste tipo é a seguinte: <NomeDaInterface><nomeDaInstânciaAnônima>= new <NomeDaInterface> { // implementação dos métodos da interface }; Classe anônima - Concluindo 22 • O Swing oferece um conjunto de diálogos simples pré-definidos para uso em interações breves com o usuário: – mensagens de erro, de alerta – obtenção de uma confirmação – entrada de um único campo de texto Diálogos Pré-Definidos 23 • Estrutura básica: JOptionPane 24 • Exibe uma mensagem e aguarda OK do usuário MessageDialog 25 • Exibe uma mensagem e obtém uma confirmação (YES/NO, OK/CANCEL) • Conjuntos de botões de opção(optionType): • JOptionPane.DEFAULT_OPTION• JOptionPane.YES_NO_OPTION • JOptionPane.YES_NO_CANCEL_OPTION • JOptionPane.OK_CANCEL_OPTION ConfirmDialog 26 • Exibe uma mensagem e obtém um valor de entrada do usuário – Campo texto editável – Combo box InputDialog 27 Linguagem de Programação Fabiano Gonçalves dos Santos Atividade 8 29 Programando … • Escreva um programa capaz de converter o valor em Reais fornecido numa caixa de entrada (TextField) em outro valor monetário conforme a seleção de uma moeda (no mínimo 3 moedas diferentes) numa caixa de seleção (Combo) indicando o resultado em um rótulo (Label). Se necessário adicione botões. 30 • Veja o programa Atividade8.java!
Compartilhar