PDA

Visualizza la versione completa : [JAVA] Lanciare un action event


Lancill
08-09-2003, 17:34
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!

Lancill
08-09-2003, 22:40
up :cry:

Storm Sentry
08-09-2003, 22:56
Non ho ben capito la domanda.... :dhò:

...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?

Lancill
08-09-2003, 23:13
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!

Storm Sentry
08-09-2003, 23:53
spero di avere capito bene...




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
.
}




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);

ciauz!

:ciauz:

Lancill
09-09-2003, 00:27
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!"... :D

non so se mi sono spiegato ora

Lancill
09-09-2003, 00:48
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


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);
}
}


Interfaccia TimerListener


import java.util.EventListener;

public interface TimerListener extends EventListener{

public void ticca(TimerEvent ev);

}


Classe Timer


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);
}

}


Classe main di prova


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();
}
}

Lancill
09-09-2003, 13:44
Ok ho corretto, ci sono riuscito, era una dimenticanza nel codice :fagiano:!

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:



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);
}

Loading