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

    [java] gestire un unico evento per tanti componenti JButton

    Salve a tutti
    Ho questo problema:
    In un pannello ho 30 JButton che al loro clic aprono un nuovo frame, adesso per non realizzare tanti ActionListener per ogni bottone, voglio realizzare un solo ActionListener per tutti e 30 i bottoni.
    Come posso fare?

    Poi è giusto fare 30 dichiarazioni con altrettante aggiunte al pannello?
    Agos

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [java] gestire un unico evento per tanti componenti JButton

    Originariamente inviato da agostinomiranda
    In un pannello ho 30 JButton che al loro clic aprono un nuovo frame, adesso per non realizzare tanti ActionListener per ogni bottone, voglio realizzare un solo ActionListener per tutti e 30 i bottoni.
    Come posso fare?
    codice:
    ActionListener actionListener = new ActionListener () {
        public void actionPerformed ........
    };
    
    button1.addActionListener (actionListener);
    ....
    button30.addActionListener (actionListener);
    (o se hai un array di JButton fai un ciclo).

    Chiaramente in actionPerformed dovrai usare e.getSource() ('e' è il ActionEvent) per sapere quale pulsante ha originato l'evento.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ho risolto in questo modo




    for(int i =1;i<31;i++)
    {
    String nomeStanza ="";
    if(i<10)
    nomeStanza ="10";
    else
    nomeStanza="1";
    JButton btn = new JButton(nomeStanza+i);
    //aggiungo il pulsante al pannello
    panelC.add(btn);
    btn.addActionListener(new ActionListener()
    { //gestione dell'evento
    public void actionPerformed(ActionEvent event)
    {
    //Mi ricavo il getText del pulsante premuto
    String numStanza = event.getActionCommand();

    //Chiamo il nuovo frame passando al costruttore il getText della stanza
    Cliente cl = new Cliente(numStanza,txtData1.getText(),txtData2.getT ext());
    cl.setVisible(true);

    }
    });
    }
    Agos

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da agostinomiranda
    Ho risolto in questo modo
    Eh beh ... se cambi le carte in tavola!
    Così crei 30 ActionListener, uno per ogni pulsante! .... esattamente l'opposto di quello che chiedevi all'inizio.

    E comunque, osservando il actionPerformed(), vedo che non hai bisogno di discernere quale è il pulsante esatto premuto ... ti basta prendere l'action command e poi fai altro. Quindi potresti creare 1 solo ActionListener esattamente così come lo hai fatto e poi lo assegni, nel ciclo, a tutti i pulsanti.
    E si tornerebbe a quello che suggerivo io prima in risposta alla tua domanda iniziale.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.