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

    Problema assegnazione di azioni alle icone di una JToolbar

    Ciao a tutti,
    vi pongo la seguente questione.
    Sto cercando di costruire un oggetto JToolbar costituito da una serie di icone.
    Ad ognuna delle icone (istanze di classe ImageIcon) voglio associare la stessa azione, differenziando però l'esecuzione della azione per via di una variabile che passo come parametro:
    un elemento (istanza di classe Element).

    Per intenderci, immaginate una toolbar con due icone, una raffigurante un cerchio, l'altra un quadrato. Cliccando su una delle due icone, il metodo che viene richiamato è lo stesso (quindi si effettueranno una serie di passaggi di settaggi vari), ma cliccando sull'icone col cerchio, l'elemento rappresentato avrà un contorno a forma circolare, cliccando su quello col quadrato, si avrà un elemento con contorno a forma quadrata.

    Ho cercato di risolvere il problema con un ciclo for:

    for(int j=0;j<iande_index;j++)
    {
    toolbar.add(
    new AbstractAction("",
    iconList[j])
    {
    public void actionPerformed(ActionEvent e)
    {
    Object TEMP = e.getSource();
    System.out.println(" L'azione è stata avviata " +
    " sull'oggetto " + TEMP);
    MyCellInfo alberoGeneal[] =
    new MyCellInfo[100];
    PropertyType localprops[] =
    new PropertyType[100];
    int mniIndex = 0;
    int propind = 0;

    String n = elementList[j].getAttribute("name");

    ...
    }

    (questo dopo aver scritto la parte di codice che posiziona le icone sulla toolbar), ma il problema è che mi assegna a tutte le icone la stessa azione, in particolare quella ottenuta dall'ultimo ciclo del FOR.

    Come risolvere? Esiste qualche interessante alternativa? Avevo pensato a MouseClicked...

  2. #2
    ... dimenticavo: l'Element che gli do come parametro, e che varia di volta nel ciclo FOR, è elementList[j]:


    ...
    int mniIndex = 0;
    int propind = 0;
    String n = elementList[j].getAttribute("name");
    ...

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

    Re: Problema assegnazione di azioni alle icone di una JToolbar

    Originariamente inviato da sonoftheland
    Come risolvere?
    Innanzitutto partiamo dal fatto che quel codice non dovrebbe nemmeno compilare. La variabile locale 'j' del for viene usata all'interno della anonymous-class. Una anonymous class può accedere alle variabili locali del metodo in cui è dichiarata ma solo se sono marcate 'final'. Ovviamente non puoi dichiarare la variabile 'j' del for come final (altrimenti non puoi incrementarla). Quindi per prima cosa nel corpo del for dovresti mettere una variabile final a cui assegni il valore di 'j'. E poi nella anonymous class usi questa variabile final.

    Poi vedo che hai usato getSource(). Per come hai gestito il tutto, ti è poco utile. La sorgente dell'evento non è la azione e nemmeno il JToolBar. È invece un JButton che è quello che restituisce il add() di JToolBar. Ma non hai preso e tenuto il valore di ritorno di add().
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Per prima cosa nel corpo del for dovresti mettere una variabile final a cui assegni il valore di 'j'. E poi nella anonymous class usi questa variabile final.
    Il punto è che se la variabile è final, una volta inizializzata non posso più aggiornarla in seguito col valore di j che varia col ciclo for.

  5. #5
    Però in effetti se la DICHIARO e INIZIALIZZO di volta in volta il problema non si pone!

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da sonoftheland
    Il punto è che se la variabile è final, una volta inizializzata non posso più aggiornarla in seguito col valore di j che varia col ciclo for.
    Non so cosa hai pensato/capito ma io intendevo questo, che è perfettamente corretto:

    codice:
    for(int j=0;j<iande_index;j++) {
        final int indice = j;
    
        toolbar.add(new AbstractAction("", iconList[j]) {
            public void actionPerformed(ActionEvent e) {
                .....elementList[indice].......
            }
    ....
    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.