la fonte dell'evento chiama i metodi in un'interfaccia

0

Sto usando Java.

In che modo una fonte di eventi come un pulsante (in una GUI) sa quale metodo chiamare in un'interfaccia?

Ad esempio, sto ascoltando Mouse Events e ho implementato un'interfaccia Listener del mouse nella mia classe, quindi come sarebbe la sorgente dell'evento sapere se dovrebbe chiamare mousePressed() , mouseReleased() o qualche altro metodo astratto nell'interfaccia ?

Sono consapevole che l'utilizzo di addMouseListener(this) , fornisce un modo per l'origine dell'evento di chiamare il metodo di un'interfaccia.

    
posta Ankit 23.07.2012 - 16:37
fonte

1 risposta

1

Per lo schema di progettazione osservabile, vedi link

Approssimativamente, quando l'utente fa clic sul pulsante del mouse e l'applicazione Java è attiva, il sistema operativo notifica all'applicazione (in questo caso, la JVM) il clic. Quindi la JVM crea l'oggetto MouseEvent, così come altri oggetti necessari per gestire l'evento e cerca gli ascoltatori di quell'evento (pensa che l'oggetto Button abbia una collezione di oggetti MouseListener e tu abbia aggiunto il listener alla raccolta). Quindi itera su tutti gli ascoltatori di quella raccolta e chiama il metodo appropriato. Conosce il metodo appropriato perché è definito nell'interfaccia MouseListener, quindi sa che tutti gli oggetti in quella raccolta implementano i metodi definiti nell'interfaccia.

Ad esempio, supponiamo che ci sia questo codice in una classe Button (probabilmente è da qualche altra parte, ma serve come esempio):

// suppose mouseListenerCollection contains all the mouse listeners in the component
for(MouseListener listener : mouseListenerCollection){
    listener.mouseClicked(event);
}

Richiama il metodo mouseClicked (MouseEvent e) perché il mouse è stato cliccato e tutti gli oggetti che implementano l'interfaccia MouseListener implementano il metodo mouseClicked e viene specificato che quando si fa clic su un mouse, deve essere richiamato il metodo mouseClicked.

Per ulteriori informazioni, fai sempre riferimento a API javadoc .

    
risposta data 27.07.2012 - 18:50
fonte

Leggi altre domande sui tag