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?
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?
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
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
Il metodo più semplice è estendere JButton in questo modo:
Istanzi il pulsante così:codice:public class TuoBottone extends JButton { private int idx; public TuoBottone(..., idx) { super( ... ); this.idx = idx; } public int getIdx() { return idx; } }
Quindi, nell'ActionListener:codice:TuoBottone bottone1 = new TuoBottone(..., 0); TuoBottone bottone2 = new TuoBottone(..., 1);
In questo modo a ciascun pulsante è associato un "idx" (un indice). E localizzi il tuo pulsante tramite questo indice.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... } }
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
La cosa più semplice è quella di confrontare il reference del componente "sorgente" dell'evento con quello del tuo menu item.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?
Dove tuoMenuItem è un campo di istanza che contiene il reference al menu item.codice:public void actionPerformed (ActionEvent e) { if (e.getSource() == tuoMenuItem) { ..... }
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Puoi fare un esempio di codice,cortesemente?
GRAZIE
Mah .. mi sembra che gli esempi li abbiamo postati, anche se magari non completi.Originariamente inviato da tcc
Puoi fare un esempio di codice,cortesemente?
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.
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.codice:ActionListener al = new ActionListener () { public void actionPerformed (ActionEvent e) { ...... } }; button1.addActionListener (al); button2.addActionListener (al); button3.....
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
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?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?
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
Ho preso in considerazione il tuo consiglio e l'avevo implementato,ma mi chiamava un eccezione qnd inserivo quella parte di codice,perché?
Grazie