Mecanismo de manuseio de eventos Java
Existem três funções para os participantes do mecanismo de eventos em Java:
1.Event Object: Objeto do estado do evento, usado nos métodos correspondentes do ouvinte, como parâmetros, geralmente existe no método do ouvinte.
2.Event Fonte: a fonte de evento específica. Por exemplo, se você clicar em um botão, o botão será a fonte do evento. Se você deseja que o botão responda a determinados eventos, precisará registrar um ouvinte específico.
3.Event Listener: Defina um método Java claro para a ocorrência de cada evento claro. Esses métodos são definidos centralmente na interface do evento ouvinte (EventListener), que deve herdar java.util.eventListener. A classe que implementa alguns ou todos os métodos no evento, interface, é o ouvinte do evento.
À medida que os eventos ocorrem, o estado correspondente geralmente é encapsulado no objeto de estado do evento, que deve ser herdado de java.util.eventobject. O objeto de status do evento é passado como um único parâmetro para o método do ouvinte que deve responder ao evento. A identidade da fonte de evento que emite um evento específico é: define o método de registro para o ouvinte do evento, de acordo com o formato de design especificado e aceita referências à instância de interface do ouvinte de evento especificado.
Para uma classe específica de evento de escuta, quando escuta o objeto de evento, chama o método correspondente e o processa.
Vamos dar uma olhada no pacote de eventos fornecido pelo JDK:
Interface pública EventListener: a interface de tag que todas as interfaces do ouvinte de eventos devem ser estendidas.
Classe pública EventObject estende o objeto implementa serializável
Todos os objetos do estado do evento derivarão a classe raiz da qual são. Todos os eventos referenciam o objeto "fonte" quando construído, que é logicamente considerado o objeto que ocorre inicialmente sobre o evento.
(1) Crie a classe Doorevent através do arquivo Doorevent.java, que herda o EventObject.
/*** Para definir um objeto de evento, você deve herdar o EventoBject*/public class DoOREvent estende o EventObject {private Static final Long SerialversionUid = 6496098798146410884L; private String Doorstate = ""; // Indica o status da porta, existem dois tipos de doorevent público (fonte do objeto, estate de string da porta) {super (fonte); this.doorstate = Doorstate; } public void SetDoorState (String Doorstate) {this.doorstate = Doorstate; } public string getdoorstate () {return this.doorstate; }}(2) definir uma nova interface de escuta de eventos, que é herdada do EventListener; Esta interface contém um manipulador para eventos de Doorevent:
/*** Defina a interface de escuta, responsável por ouvir os eventos doorevent*/interface pública de porta de porta estende a EventListener {public void Doorevent (evento doorevent);}Através da interface acima, definimos as classes de escuta de eventos, que implementam especificamente a função de escuta e a função de manuseio de eventos.
/*** Esta classe implementa a interface da porta 1 e executa ações específicas de abertura e fechamento de porta*/classe pública Doorlistener1 implementa a porta-listener {@Override public void DoOREvent (eventiEvent Event) {// TODO «g-GOnerated Method Stub if (event.getDstate ()! System.out.println ("Door1 Open"); } else {System.out.println ("Door1 fechado"); }}}/*** Esta classe implementa a interface de escuta da porta 2, que executa uma abertura específica de porta, fechamento de portas e abertura de luz e ações de fechamento de luz*/classe pública Doorlistener2 implementa o portolistener {@Override Public void DoOREvent (evento doorevent) {// TOME-GOLINE AUTOMADO STub (event.get.DoorTate ()! event.getDoorState (). Equals ("Open")) {System.out.println ("Door2 abre, ligando a luz no corredor ao mesmo tempo"); } else {System.out.println ("Door2 fecha, ligando a luz no corredor ao mesmo tempo"); }}}(3) Crie uma classe de origem de eventos através do porxão.java, que usa um objeto de ouvintes de coleção para armazenar todos os objetos do ouvinte de eventos. O método de armazenamento é através do AddDoorListener (..). NotifyListeners (..) é um método que desencadeia um evento, usado para notificar o sistema: o evento ocorreu e você pode chamar a função de processamento correspondente.
/*** Objeto de origem do evento, aqui você pode imaginá -lo como um controle remoto que controla a abertura e o fechamento da porta,*(se estiver em swing, é semelhante a um botão)*/Public Class Doormanager {ouvintes de coleção particular; / ** * Adicionar evento * * @param ouvinte * Doorlistener */ public void addDoorListener (ouvinte do steatlistener) {if (ouvintes == null) {ouvintes = new HashSet (); } ouvintes.add (ouvinte); } / ** * Remova o evento * * @param ouvinte * Doorlistener * / public void removedorListener (listener de portão) {if (ouvintes == null) return; ouvintes.remove (ouvinte); } / *** Trigger o evento de abertura da porta* / Protected void fireweationSpaceopened () {if (ouvintes == null) return; Evento de doorevent = novo doorevent (isto, "aberto"); notifylisteners (evento); } / *** Trigger o evento de fechamento da porta* / Protected void fireworkspaceclosed () {if (ouvintes == null) return; DOOREVENT EVENT = NOVO DOOREVENT (isto, "Close"); notifylisteners (evento); } / ** * notifique todos os listadores de portas * / private void notifyListeners (evento doorevent) {iterator iter = ouvintes.iterator (); while (iter.hasNext ()) {Doorlistener ouvinte = (Doorlistener) iter.Next (); ouvinte.doorevent (evento); }}}(4) Ok, finalmente escreva um programa de teste para testar nossos eventos personalizados. Este programa não deve ser difícil de entender :)
/*** O programa principal é imaginado como quem deseja abrir a porta*/classe pública capacho {public static void main (string [] args) {portão gerenciador = new portanager (); gerente.adddoorListener (new Doorlistener1 ()); // Adicione o ouvinte à porta 1 gerente.adddoorListener (new DoorListener2 ()); // Adicione o ouvinte à porta 2 // Open Door Manager.Fireworkspaceopened (); System.out.println ("Eu entro"); // Close Manager.fireworkspaceclosed (); }}Execute capacho
A porta 1 abre a porta 2 abre, enquanto abre as luzes no corredor
Eu entrei
A porta 1 fecha a porta 2 fecha, enquanto fecha as luzes do corredor
Obrigado pela leitura, espero que isso possa ajudá -lo. Obrigado pelo seu apoio a este site!