[RISOLTO] Classi con eventi

di il
15 risposte

15 Risposte - Pagina 2

  • Re: [RISOLTO] Classi con eventi

    Ciao, di solito gli eventi dovrebbero estendere la classe EventObject, che è stata pensata proprio per questo scopo.

    Un esempio è il seguente: c'è una classe che fa da contatore e vogliamo essere avvisati quando questa assume un valore negativo.

    Classe CounterNegativeEvent.java (l'evento "personalizzato")
    
    import java.util.EventObject;
    
    public class CounterNegativeEvent extends EventObject {
    	
    	private static final long serialVersionUID = 1L;
    	
    	private int count;
    
    	public CounterNegativeEvent(Object source, int count) {
    		super(source);
    		this.count = count;
    	}
    	
    	public int getCount() {
    		return count;
    	}
    
    }
    
    Classe CounterNegativeEventListener.java (il "contratto" che i listeners devono rispettare):
    
    
    public interface CounterNegativeEventListener {
    	
    	public void onCounterNegativeEvent(CounterNegativeEvent ev);
    
    }
    
    Classe Counter.java (il nostro contatore):
    
    import java.util.LinkedList;
    import java.util.List;
    
    public class Counter {
    
    	private List<CounterNegativeEventListener> listeners;
    	private int count;
    	
    	public Counter() {
    		listeners = new LinkedList<CounterNegativeEventListener>();
    		count = 0;
    	}
    	
    	public void addCustomEventListener(CounterNegativeEventListener listener) {
    		this.listeners.add(listener);
    	}
    	
    	public void removeCustomEventListner(CounterNegativeEventListener listener) {
    		this.listeners.remove(listener);
    	}
    	
    	public void setCount(int count) {
    		this.count = count;
    		if (count < 0) {
    			CounterNegativeEvent ev = new CounterNegativeEvent(this, getCount());
    			for (CounterNegativeEventListener listener : listeners) {
    				listener.onCounterNegativeEvent(ev);
    			}
    		}
    	}
    	
    	public int getCount() {
    		return count;
    	}
    }
    
    Il main:
    
    
    public class Main {
    
    	public static void main(String[] args) {
    		Counter counter = new Counter();
    		
                    // creo un listener come classe anonima
    		CounterNegativeEventListener listener = new CounterNegativeEventListener() {
    			
    			@Override
    			public void onCounterNegativeEvent(CounterNegativeEvent ev) {
    				System.out.println("The counter is negative: "+ev.getCount());
    			}
    		};
    		
    		counter.addCustomEventListener(listener);
    		
    		counter.setCount(3); // non stampa nulla
    		
    		counter.setCount(-2); // stampa "The counter is negative: -2"
    	}
    
    }
    
Devi accedere o registrarti per scrivere nel forum
15 risposte