Originariamente inviato da tulkas85
giusto per curiosità , ma volendo è possibile generare un evento in una classe, e catturarlo in un altra ?
Certo!
Ti spiego un po' la struttura di una applicazione, così magari capisci.
Ho questa interfaccia, in pratica è un "listener" personalizzato:
codice:
package jcodecollector.listener;
import java.util.ArrayList;
import jcodecollector.common.bean.Snippet;
import jcodecollector.common.bean.Syntax;
public interface SnippetListener {
public void snippetEdited(Snippet snippet, boolean isNew);
public void categoryRenamed(String oldName, String newName);
public void categoryRemoved(String name);
public void snippetRenamed(String oldName, String newName);
public void snippetRemoved(String name);
public void categoriesUpdated(String selected);
...
Nel programma ho diverse classi interessate a sapere quando "succede qualcosa". Ad esempio, quando cancello uno snippet devo: 1. toglierlo dal JTree in cui è visualizzato 2. toglierlo dal database 3. aggiornare la barra di stato. Tutte queste classi implementano l'interfaccia postata sopra. Ho poi una classe "centrale" (State) che si occupa di memorizzare i vari listener:
codice:
public class State implements SnippetListener, CountListener {
private ArrayList<SnippetListener> snippetListeners;
....
}
All'inizio del programma creo i vari oggetti "ascoltatori" e li passo allo State:
codice:
State.getInstance().addSnippetListener(this);
State.getInstance().addSnippetListener(snippetPanel);
Quando poi "succede qualcosa" non devo far altro che chiamare il corrispettivo metodo di State. Ad esempio, se viene rinominata una categoria chiamo
codice:
public void categoryRenamed(String oldName, String newName) {
for (SnippetListener listener : snippetListeners) {
listener.categoryRenamed(oldName, newName);
}
}
In automatico tutti gli interessati (che a loro volta implementano l'interfaccia) verrano notificati di quello che è successo e agiranno di conseguenza.
Spero di essere stato chiaro, eventualmente chiedi pure :master: