Salve a tutti, è possibile in java dare la possibilità ad un proprio oggetto di lanciare un Action Event? se si come?
Grazie mille in anticipo!
Salve a tutti, è possibile in java dare la possibilità ad un proprio oggetto di lanciare un Action Event? se si come?
Grazie mille in anticipo!
up
Non ho ben capito la domanda....
...intendi forse fare in modo che si generi il risultato (per esempio) della pressione di un pulsante senza che questa venga effettivamente eseguita da parte dell'utente?
no, non è proprio quello, ma a pensarci bene mi interesserebbe! Se puoi spiegarmelo mi fai un piacerone!
Per quanto riguarda la mia domanda, praticamente vorrei capire come è scritto il codice dei Buttons che inviano un ActionEvent al momento della loro pressione!
spero di avere capito bene...
eventualmente se vuoi fare in modo che il bottone non faccia più nulla basta ke ti fai un metodo tipo disableButton (non disable() e basta che è deprecated!!!) in cui scrivi removeActionListener(this);codice:public class myButton extends Button implements ActionListener { public myButton (...) { . . . . addActionListener(this); // Aggiunge un ascoltatore; è indispensabile } . . . . public void actionPerformed (ActionEvent e) { . . Qui devi scrivere il codice di ciò . che il pulsante fa quando viene premuto . }
ciauz!
non ci siamo... forse non riesco a spiegarmi io! Ora ti dico qual è il mio problema, forse ci capiamo meglio:
Mettiamo il caso che io voglia creare un Timer che generi quando voglio io un TimerEvent... tutti questi non sono classi di Java, ma dovrei crearmele da me. Ecco, come si fa? In particolare non riesco a capire come si lancia un evento "non standard". Tornando all'esempio del Timer non capisco come diavolo fare a dire a un eventuale TimerListener: "EHI, HO LANCIATO UN EVENTO, GESTISCILO!"...
non so se mi sono spiegato ora
Ok ho buttato giù qualche linea... funziona il timer, ma non mi cattura (o forse non lo lancia proprio) l'evento!
Ditemi dove sbaglio vi prego!
Ciauz
Classe TimerEvent
Interfaccia TimerListenercodice:import java.util.EventObject; import java.util.*; public class TimerEvent extends EventObject { private Vector listeners = new Vector(); private int intervallo; public TimerEvent(Object source){ this(source, 0); } public TimerEvent(Object source, int intervallo){ super(source); this.intervallo = intervallo; } public int getIntervallo(){ return intervallo; } public void addTimerListener(TimerListener tl){ listeners.addElement(tl); } public void removeTimerListener(TimerListener tl){ listeners.removeElement(tl); } public void fireTimerEvent(int ticco){ TimerEvent te = new TimerEvent(source, ticco); } }
Classe Timercodice:import java.util.EventListener; public interface TimerListener extends EventListener{ public void ticca(TimerEvent ev); }
Classe main di provacodice:import java.awt.*; import javax.swing.JPanel; import java.util.*; public class Timer extends Thread{ private int delay, intervallo, contatore = 0, punto; TimerEvent timerEvent; public Timer(){ this(1000, 1, 10); } public Timer(int delay, int intervallo, int puntoFire){ this.delay = delay; this.intervallo = intervallo; timerEvent = new TimerEvent(this); this.punto = puntoFire; } public void run() { while(true){ try{ Thread.sleep(delay); System.out.println(contatore); } catch(InterruptedException ie){ System.out.println("Thread Interrotto"); } contatore += intervallo; if(contatore == punto) timerEvent.fireTimerEvent(punto); } } public void addTimerListener(TimerListener tl){ timerEvent.addTimerListener(tl); } public void removeTimerListener(TimerListener tl){ timerEvent.removeTimerListener(tl); } }
codice:public class ProvaTimer { public static void main(String[] args) { Timer t = new Timer(1000, 1, 10); t.addTimerListener(new TimerListener() { public void ticca(TimerEvent e) { System.out.println("TIC"); } }); t.start(); } }
Ok ho corretto, ci sono riuscito, era una dimenticanza nel codice !
ho solo un problema con lo stop e il resume del thread... se chiamo myStop() nessun problema, se pero' chiamo myResume() mi da questa eccezione:
java.lang.IllegalMonitorStateException: current thread not owner
at java.lang.Object.notify(Native Method)
at test.MyTimer.myResume(MyTimer.java:43)
at test.MyTestTimer.main(MyTestTimer.java:17)
riposto il codice:
codice:public class MyTestTimer { public static void main(String[] args) { MyTimer t = new MyTimer(1000, 1, 10); t.addMyTimerListener(new MyTimerListener() { public void tic(MyTimerEvent t) { System.out.println("TICCATO"); } }); } } ________________________________________ import java.util.*; public class MyTimer implements Runnable { private int delay, intervallo, puntoFire, contatore = 0; private Vector listener = new Vector(); private boolean flag = false; Thread t; public MyTimer(){ this(1000, 1, 10); } public MyTimer(int delay, int intervallo, int puntoFire){ this.delay = delay; this.intervallo = intervallo; this.puntoFire = puntoFire; t = new Thread(this); t.start(); } public void run() { while(true){ try{ t.sleep(delay); System.out.println(contatore); contatore += intervallo; if(puntoFire == contatore) fireMyTimerEvent(puntoFire); while(flag) wait(); } catch (InterruptedException e){ System.out.println("INTERROTTO"); } } } public void myResume(){ flag = false; notify(); } public void myStop(){ flag = true; } public void addMyTimerListener(MyTimerListener tl){ listener.addElement(tl); } public void removeMyTimerListener(MyTimerListener tl){ listener.removeElement(tl); } public void fireMyTimerEvent(int tic){ MyTimerEvent t = new MyTimerEvent(this, tic); for(int i = 0; i < listener.size(); i++) ((MyTimerListener) listener.elementAt(i)).tic(t); } public void fireMyTimerEvent(String message){ MyTimerEvent t = new MyTimerEvent(this, message); for(int i = 0; i < listener.size(); i++) ((MyTimerListener) listener.elementAt(i)).tic(t); } public int getContatore(){ return contatore; } } ________________________________________ import java.util.EventObject; public class MyTimerEvent extends EventObject{ private int puntoFire; private String message; public MyTimerEvent(Object source){ this(source, 10); } public MyTimerEvent(Object source, int puntoFire){ super(source); this.puntoFire = puntoFire; } public MyTimerEvent(Object source, String message){ super(source); this.message = message; } } ________________________________________ import java.util.EventListener; public interface MyTimerListener extends EventListener{ public void tic(MyTimerEvent te); }