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

    Problema con addActionListener(-----)

    Se io assegnassi a ogni pulsante il nome in questo modo e gli passo "this" come evento, me lo da buono
    e funziona tutto a meraviglia.
    buttons[i][j]=new JButton(" "+Integer.toString(i)+"-"+Integer.toString(j);
    buttons[i][j].addActionListener(this);

    Ma se io non voglio dare quel etichetta al pulsante e invece di "this" passargli
    -->" "+Integer.toString(i)+"-"+Integer.toString(j);

    mi dice:
    .... addActionListener(java.awt.event.ActionListener) in javax.swing.AbstractButton cannot be applied to (java.lang.String)

    se io provo a fare(sarebbe l'ideale questa situazione per me):
    buttons[i][j]=new JButton();
    buttons[i][j].addActionListener(" "+Integer.toString(i)+"-"+Integer.toString(j);

    Mi da quell'errore e io a ogni pulsante voglio dare questo evento,
    come stringa, non capisco...Come posso risolvere???
    Grazie mille...

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Credo che tu debba ripassare bene alcuni concetti di base delle GUI.

    Quello che il metodo addActionListener() vuole è, appunto, un ActionListener... non una stringa, non un Integer, non un Object, né qualunque altra cosa... vuole un ActionListener, che può essere qualunque oggetto che implementi tale interfaccia (tu stai passando una stringa...).

    In buona sostanza, cerca di spiegare ciò che vuoi ottenere, perchè quello che stai cercando di fare è assolutamente privo di senso.


    Ciauz.
    "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

  3. #3
    Per favore evita di attaccare con frasi "è privo di senso" perchè ha senso, piuttosto dimmi, non ho capito...
    Comunque ho una matrice di pulsanti.
    Non do a nessuno un nome, ma gli do solo un icona.
    Ora se ad ognuno gli aggiungo un listener, xcio "addActionListener..."
    posso occuparmi di quel che succede a ogni pulsante quando lo clicco.

    Ma come faccio a capire che ho cliccato il pulsante alla posizione 0-4 della matrice?
    Appunto gli vorrei passare quel codice di prima a ogni pulsante con la relativa posizione.
    Se ogni pulsante lo chiamo come le posizioni(es: 0-0. 0-1. 0-2....) e gli dico
    addActionListener(this), mi prende come evento 0-0 ed è quello che voglio.

    Ma non voglio che i miei pulsanti abbiano come nome le coordinate, ma che siano vuoti.
    Ma non posso dire "this" x ogni pulsante xk this sarebbe x il nome che gli assegno.

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da denis_roy
    Per favore evita di attaccare con frasi "è privo di senso" perchè ha senso, piuttosto dimmi, non ho capito...
    Garantisco sul mio onore: ciò che stai facendo non ha proprio alcun senso. Non lo dico io, lo dice Java... Senza offesa, eh...

    Comunque ho una matrice di pulsanti.
    Non do a nessuno un nome, ma gli do solo un icona.
    E fin qui ok. Non vedo il codice in cui tu lo fai, ma mi sta bene.

    Ora se ad ognuno gli aggiungo un listener, xcio "addActionListener..."
    posso occuparmi di quel che succede a ogni pulsante quando lo clicco.
    Ok, ma devi aggiungere un ActionListener, non una stringa... e tu stai aggiungendo una stringa (la concatenazione di più stringhe, per la precisione... e te lo dice anche il compilatore).

    Ma come faccio a capire che ho cliccato il pulsante alla posizione 0-4 della matrice?
    Appunto gli vorrei passare quel codice di prima a ogni pulsante con la relativa posizione.
    Se ogni pulsante lo chiamo come le posizioni(es: 0-0. 0-1. 0-2....) e gli dico
    addActionListener(this), mi prende come evento 0-0 ed è quello che voglio.
    Ok, la problematica è più chiara.
    Quello che vuoi fare tu è assegnare a ciascun pulsante un ActionListener diverso.
    E lo si può fare.

    Se vuoi avere un indice, ad esempio, puoi costruire una tua classe, che implementa ActionListener e che prende l'indice nel costruttore.

    Esempio veloce:

    codice:
    public class TuaClasse implements ActionListener {
       private int i, j;
       public TuaClasse(int i, int j) { this.i = i; this.j = j;}
       public void actionPerformed(ActionEvent ae) {
          JOptionPane.showMessageDialog(null, "E' stato premuto il pulsante " + i + ", " + j, "Titolo");
       }
    }
    Quindi usare questo come ActionListener:

    codice:
    buttons[i][j].addActionListener( new TuaClasse(i,j) );
    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
    Ok mi sarò spiegato male io, ma era questo ciò che volevo...
    Allora grazie mille! Buona serata!

  6. #6
    Se hai voglia mi spiegheresti cosa significa?
    Cioè tu costruisci un oggetto "new TuaClasse(i,j);"
    ogni volta che dai un listener a un pulsante?...
    Grazie ancora!

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    allora le azioni vengono gestite tramite gli actionlistener. Per poter funzionare, ne devi associare uno al tuo bottone.
    Per actionlistener in java si intende una qualsiasi classe che implementa l'interfaccia Actionlistener (cioè che dichiari di fare qualcosa).
    Ora visto che tu in qualche modo devi sapere che premi il pulsante (i, j) devi in qualche modo dare queste informazioni all'actionlistener.
    Il modo più rapido è creare una classe (come leleft ti ha fatto vedere) a cui passi le istanze (i, j) (che alla fine identificano il tuo bottone). Una volta che hai creato la classe ne associ un'istanza al bottone.

    questo è quello che fai con
    codice:
    bottone[i][j].addActionListener(new Actionlistenertuo(i, j));
    e potevi fare
    codice:
    Actionlistenertuo ac = new Actionlistenertuo(i, j);
    bottone[i][j].addActionListener(ac);
    magari è più chiaro il passaggio

  8. #8
    Ok chiaro. !!!! Grazie mille davvero! BUONA SERATA A TUTTI!

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.