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

    Problema ad istanziare eventi ad un array di JButton

    Ciao a tutti,
    avrei un problema con la creazione di eventi in un array di JButton che vorrei fare attraverso un ciclo for ma non funziona, invece se al posto del for metto l'indice dell'array manualmente funziona tutto

    Questa è il metodo che assegna un evento ciascun bottone:

    public void eventi(JButton button[],ImageIcon img[],String id[],ImageIcon coperta){
    for(j=0;j<18;j++){
    button[j].addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e) {
    if(attiva==true){
    attiva=false;
    if(id[j]==id[i]){
    button[j].setIcon(img[j]);
    }
    else{
    for(j=0;j<18;j++){
    button[j].setIcon(coperta);
    }
    }
    }
    else{
    button[j].setIcon(img[j]);
    attiva=true;
    }

    i=j;
    }
    });
    }
    }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da aramun Visualizza il messaggio
    avrei un problema con la creazione di eventi in un array di JButton che vorrei fare attraverso un ciclo for ma non funziona, invece se al posto del for metto l'indice dell'array manualmente funziona tutto
    Non vedo nel metodo la dichiarazione delle variabili i e j ... quindi deduco ovviamente che siano variabili di "istanza". Che sono certamente usabili dalla anonymous inner class usata per implementare ActionListener.

    Ma il punto importante è che quando crei la istanza della anonymous class, i valori di i e j NON vengono "copiati". Detto in altro modo: ciascuna delle istanze NON ha il suo valore di j e j!
    Quando actionPerformed verrà invocato (molto dopo ovviamente), esso userà i valori di i e j che sono gli ultimi che sono rimasti dopo l'ultimo assegnamento. E questo é il tuo problema.

    Inoltre deduco che button/img/id sono correlati tra di loro e che coperta invece è globale per tutti (stai facendo un gioco di carte o tipo "memory" o simile? ). Quindi le cose sarabbero da modellare meglio. Queste cose si risolvono in questo modo .... con la OOP.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ok ho risolto assegnando a ciascun bottone un testo che servirà da identificativo
    Ultima modifica di aramun; 08-12-2014 a 13:09

Tag per questa discussione

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.