Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 28
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    313

    [JAVA]Catturare evento generato da un JButton

    Salve.Vorrei catturare l'evento generato da un JButton a cui è associato un icona ImageIcon.L'evento viene ascolatato da un'altra classe
    Come devo fare?

  2. #2
    ciao.
    Nell'altra classe gli fai implementare la ActionLister implementando il metodo

    public void actionPerformed(ActionEvent e);

    Es.

    public void AltraClasse implements ActionListener

    public AltraClasse(){
    }

    public void actionPerformed(ActionEvent e){
    // implementa ciò ke vuoi fare
    }
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    313
    Il problema è che qnd esiste un Jbutton con un text,per catturare l'evento generato da quel bottone io prende il nome del bottone,ma quando ad un JButton è associato un icona come faccio a sapere quale JButton a generato l'evento?
    Grazie

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Il metodo più semplice è estendere JButton in questo modo:
    codice:
    public class TuoBottone extends JButton {
       private int idx;
       public TuoBottone(..., idx) {
          super( ... );
          this.idx = idx;
       }
    
       public int getIdx() { return idx; }
    }
    Istanzi il pulsante così:
    codice:
    TuoBottone bottone1 = new TuoBottone(..., 0);
    TuoBottone bottone2 = new TuoBottone(..., 1);
    Quindi, nell'ActionListener:
    codice:
    public void actionPerformed(ActionEvent ae) {
       TuoBottone tb = (TuoBottone) ae.getSource();
       switch( tb.getIdx() ) {
          case 0: ...; break;   // Il pulsante "0" farà qualcosa
          case 1: ...; break;   // Il pultante "1" farà qualcos'altro...
       }
    }
    In questo modo a ciascun pulsante è associato un "idx" (un indice). E localizzi il tuo pulsante tramite questo indice.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da tcc
    Il problema è che qnd esiste un Jbutton con un text,per catturare l'evento generato da quel bottone io prende il nome del bottone,ma quando ad un JButton è associato un icona come faccio a sapere quale JButton a generato l'evento?
    La cosa più semplice è quella di confrontare il reference del componente "sorgente" dell'evento con quello del tuo menu item.

    codice:
    public void actionPerformed (ActionEvent e)
    {
        if (e.getSource() == tuoMenuItem) {
            .....
    }
    Dove tuoMenuItem è un campo di istanza che contiene il reference al menu item.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    313
    Puoi fare un esempio di codice,cortesemente?
    GRAZIE

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da tcc
    Puoi fare un esempio di codice,cortesemente?
    Mah .. mi sembra che gli esempi li abbiamo postati, anche se magari non completi.

    Vediamo la cosa in generale. Se ad esempio hai 3 JButton a cui vuoi applicare, ad ognuno, un ActionListener hai almeno 3 possibilità:

    A) Ad ogni JButton applichi una istanza diversa di un diverso listener.

    codice:
    button1.addActionListener (new ActionListener () {
        public void actionPerformed (ActionEvent e) { ...... }
    });
    
    button2.addActionListener (new ActionListener () {
        public void actionPerformed (ActionEvent e) { ...... }
    });
    
    button3.....

    B) Ad ogni JButton applichi una istanza diversa dello stesso listener.

    codice:
    class MioListener implements ActionListener {
        public void actionPerformed (ActionEvent e) { ...... }
    }
    
    button1.addActionListener (new MioListener ());
    button2.addActionListener (new MioListener ());
    button3.....

    C) Ad ogni JButton applichi la stessa istanza dello stesso listener.

    codice:
    ActionListener al = new ActionListener () {
        public void actionPerformed (ActionEvent e) { ...... }
    };
    
    button1.addActionListener (al);
    button2.addActionListener (al);
    button3.....
    Nel caso A) non hai bisogno dentro il listener di "capire" quale è la sorgente dell'evento ... ce ne è solo 1. Nei casi B) e C) invece sì, in quanto il codice del listener è unico e quindi devi determinare quale è la sorgente dell'evento. Cosa che appunto si può fare usando getSource() che fornisce l'oggetto che ha originato l'evento.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    313
    io ho usato come ascoltatore un'altra classe e quindi un suo actionPerfomed() ed invece di getSource() ho usato getActionCommand(),ho provato ad usare getSource()
    in qst modo :
    e.getSource == buttonClose ma dice giustamente che deve essere creato il campo buttonClose come faccio?

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Originariamente inviato da tcc
    io ho usato come ascoltatore un'altra classe e quindi un suo actionPerfomed() ed invece di getSource() ho usato getActionCommand(),ho provato ad usare getSource()
    in qst modo :
    e.getSource == buttonClose ma dice giustamente che deve essere creato il campo buttonClose come faccio?
    Non hai proprio preso in considerazione la mia risposta, vero?
    Essendo che hai il listener su una classe separata, credo che ti convenga usarla, altrimenti dovresti fare in modo che la classe esterna veda i tuoi pulsanti (rendendoli pubblici o passandoli tutti alla classe stessa)...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    313
    Ho preso in considerazione il tuo consiglio e l'avevo implementato,ma mi chiamava un eccezione qnd inserivo quella parte di codice,perché?
    Grazie

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 © 2025 vBulletin Solutions, Inc. All rights reserved.