Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [JAVA] Lanciare un action event

    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!

  2. #2

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

  4. #4
    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!

  5. #5
    spero di avere capito bene...

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


  6. #6
    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

  7. #7
    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
    codice:
    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
    codice:
    import java.util.EventListener;
    
    public interface TimerListener extends EventListener{
    
      public void ticca(TimerEvent ev);
      
    }
    Classe Timer
    codice:
    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
    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();
    }
    }

  8. #8
    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);
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.