Curso Java - Básico - Eventos

Definição

  • Eventos são acontecimentos que ocorrem em algum lugar do aplicativo e que se deseja que sejam observados, e tratados quando for o caso.
  • Eventos em Java são objetos
    • Subclasses de java.util.EventObject

Arquitetura de Eventos

  • Participantes
  • Fonte (source object)
  • Evento (event object)
  • Receptor de Eventos (event listener)
  • Um evento é sempre gerado por apenas uma fonte.
  • Vários receptores podem tratar um evento.

    ./images/Arquitetura.jpg

Hierarquia de Eventos

./images/Hierarquia.jpg

  • Todas as classes de eventos e interfaces listener do AWT estão no pacote java.awt.event.

Event Objects

  • É criado pelo objeto source para guardar informações sobre o evento ocorrido.
  • É transmitido do objeto source para cada listener através do método apropriado.
  • É consultado por cada listener para que este possa determinar a melhor forma de tratar o evento em questão.
  • Deve herdar de java.util.EventObject

Eventos de Baixo Nível (1)

  • Eventos indivisíveis, geralmente emitidos pelo sistema operacional
    • Movimentação do mouse,
    • Pressionamento e liberação dos botões do mouse,
    • Pressionamento e liberação de teclas,
    • Mudança do foco do teclado,
    • Mudança do estado de uma janela.

Eventos de Baixo Nível (2)

  • KeyEvent - componentes afetados pelo mouse.
  • MouseEvent - componentes afetados pelo mouse.
  • FocusEvent - componentes ganham ou perdem o foco.
  • MouseEvent - componentes afetados pelo mouse.
  • WindowEvent - ações realizadas com janelas.

Eventos Semânticos (1)

  • Eventos compostos de outros eventos de baixo-nível, possivelmente emitidos pelo próprio componente a partir da observação dos eventos de baixo-nível.
  • É uma boa prática de programação tratar apenas de eventos semânticos, para garantir a portabilidade do código Java.
  • Em geral, corresponde a uma seqüência de eventos de baixo-nível:
    • ActionEvent (botão pressionado)
      • cursor do mouse entra na área retangular do botão,
      • botão do mouse é pressionado,
      • cursor do mouse pode sair e entrar na área retangular do botão,
      • botão do mouse é liberado dentro da área retangular do botão.

Eventos Semânticos (3)

  • ActionEvent - componentes de ação.
  • AdjustmentEvent - novos valor escolhido entre uma faixa de valores possíveis (scrollbar).
  • ItemEvent - item selecionado dentro de um conjunto de itens.
  • TextEvent - componentes de texto.

Listeners (1)

  • Objeto de uma classe que implementa alguma interface XXXListener para a recepção de eventos XXX.
  • Toda interface Listener deve herdar de java.util.EventListener.
  • Uma interface Listener declara alguns métodos que serão executados quando o evento relacionado àquela interface ocorrer.

Listeners (2)

  • ActionEvent - ActionListener
  • MouseEvent - MouseListener e MouseMotionListener
  • ItemEvent - ItemListener
  • AdjustmentEvent - AdjustmentListener
  • TextEvent - TextListener
  • WindowEvent - WindowListener
  • FocusEvent - FocusListener
  • KeyEvent - KeyListener

Sources

  • Um evento deve sempre ter origem em algum objeto fonte, que é diretamente afetado pelo evento em questão.
  • Os objetos source devem prover métodos addXXXListener() e removeXXXListener() para manter uma lista de objetos listeners interessados em receber notificações sobre a ocorrência de determinados eventos.

Sources - Exemplo

./images/Sources.jpg

  • O mesmo objeto que é fonte às vezes também é listener, se implementar as interfaces.

    ./images/Sources2.jpg

    • O primeiro this é a fonte e o segundo é o listener.

Como implementar um listener?

  • Crie uma nova classe que declare implementar o(s) listener(s) desejado.

    ./images/ImplementandoListener.jpg

  • Implemente cada um dos métodos da(s) interface(s).

    ./images/ImplementandoListener2.jpg

  • Veja a documentação sobre o listener usado e o evento correspondente (para saber que métodos usar para obter suas informações).
    • Todos os métodos são public void .
    • Todos recebem o tipo de evento correspondente ao tipo do listener como argumento.

Quais os listeners, métodos e eventos?

  • Consulte a documentação no pacote java.awt.event.
  • Veja em cada lisntener a assinatura dos métodos que você deve implementar.
  • Veja em cada evento os métodos que você pode chamar dentro do listener para obter as informações desejadas.
          
                    String comand = actionEvent.getActionCommand();
    
        
  • Veja cada componente-fonte os métodos que você pode chamar para obter informações sobre o componente.

    ./images/ComponenteFonte.jpg

Adaptadores

  • Alguns listeners possuem uma classe Adapter que implementa todos os métodos, sem instruções:
    • Implementação vazia:
    • Só existe para listeners que têm mais de um método.
  • São úteis quando um Ouvinte precisa implementar apenas um dentre vários métodos de um Listener.
    • Pode sobrepor a implementação desejada do método do Adapter e não precisa se preocupar com os outros.
    • Não são úteis em ouvintes que já estendem outras classes ou quando implementa diferentes listeners.
  • O nome do adapter é semelhante ao do Listener.

    ./images/Adaptadores.jpg

Tratamento de eventos com classes internas (1)

  • É comum utilizar-se classes internas, mais especificamente, classes anônimas no tratamento de enventos de uma GUI.
  • Vantagens incluim a possibilidade de enxergar os componentes que geralmente são atributos private .
  • O exemplo anterior usa uma classe interna de instância (também chamada de classe aninhada, ou embedded).

Tratamento de eventos com classes internas (2)

  • O exemplo abaixo usa classes anônimas (compare os dois!).

    ./images/EventoClassesInternas.jpg