Visualizzazione dei risultati da 1 a 8 su 8

Hybrid View

  1. #1
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Se questo codice che ho quotato lo metti (o l'hai già messo) nel for che si vede prima (quel for (int i = 0; i < 8; i++))
    ciao avevo già provato a fare cosi e purtroppo non sono riuscito a farlo funzionare perché mi da un errore riguardante qualcosa che tu hai accennato sotto. Facendo cosi
    codice:
    public void AggiungiPannelli(){
        for (int i = 0; i < 8; i++) {
            pannelli.add(new JPanel());
            pannelli.get(i).setBackground(Color.BLACK);
            pannelli.get(i).addMouseListener(new MouseAdapter() {
            @Override
             public void mousePressed(MouseEvent e) {
                   pannelli.get(i).setBackground(Color.RED);
             }
            @Override
             public void mouseReleased(MouseEvent e) {
                   pannelli.get(i).setBackground(Color.BLACK);
             }
        });
    }
    dentro nei due metodi mousePressed e Relased quando faccio la get per aggiornare il colore di background mi da errore sulla i dicendo "Local variable i defined in an enclosing scope must be final or effectively
    final".
    Ho provato a dichiarare la i come final globale ma non cambia nulla. E se metto la i come final all'interno del metodo nel ciclo poi non me la fa più incrementare perché mi dice che la variabile finale i non può essere assegnata. Sono bloccato a questo.
    Grazie mille davvero per l'aiuto che mi stai dando.

    ps mi scuso per i colori ma pur incollando senza formattazione il codice poi quando lo pubblico i colori rimangono...
    Ultima modifica di mike1991; 21-08-2016 a 11:43

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da mike1991 Visualizza il messaggio
    ciao avevo già provato a fare cosi e purtroppo non sono riuscito a farlo funzionare perché mi da un errore riguardante qualcosa che tu hai accennato sotto. Facendo cosi
    codice:
    public void AggiungiPannelli(){
        for (int i = 0; i < 8; i++) {
            pannelli.add(new JPanel());
            pannelli.get(i).setBackground(Color.BLACK);
            pannelli.get(i).addMouseListener(new MouseAdapter() {
            @Override
             public void mousePressed(MouseEvent e) {
                   pannelli.get(i).setBackground(Color.RED);
             }
            @Override
             public void mouseReleased(MouseEvent e) {
                   pannelli.get(i).setBackground(Color.BLACK);
             }
        });
    }
    No, perché qui il problema è il riferimento alla variabile 'i'.

    Più semplicemente (e più pulito):

    codice:
    for (int i = 0; i < 8; i++) {
        JPanel panel = new JPanel();
        // altri setup su panel
        
        panel.addMouseListener(new MouseAdapter() {
            // i metodi qui POSSONO fare riferimento a panel, che è quel JPanel distinto per ciascun ciclo
        });
    
        // .. altro (aggiungi panel dove vuoi)
    }

    Da Java 8 panel può non essere final, prima di Java 8 DEVE essere final.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Quote Originariamente inviata da andbin Visualizza il messaggio
    No, perché qui il problema è il riferimento alla variabile 'i'.

    Più semplicemente (e più pulito):

    codice:
    for (int i = 0; i < 8; i++) {
        JPanel panel = new JPanel();
        // altri setup su panel
        
        panel.addMouseListener(new MouseAdapter() {
            // i metodi qui POSSONO fare riferimento a panel, che è quel JPanel distinto per ciascun ciclo
        });
    
        // .. altro (aggiungi panel dove vuoi)
    }

    Da Java 8 panel può non essere final, prima di Java 8 DEVE essere final.
    e ma facendo cosi creo una serie di pannelli che non sono nell'ArrayList di pannelli. Io ho bisogno che siano in una lista perché una volta creati ho bisogno di poterli spostare etc. Tramite un ArrayList non si può fare?

  4. #4
    Quote Originariamente inviata da andbin Visualizza il messaggio
    No, perché qui il problema è il riferimento alla variabile 'i'.

    Più semplicemente (e più pulito):

    codice:
    for (int i = 0; i < 8; i++) {
        JPanel panel = new JPanel();
        // altri setup su panel
        
        panel.addMouseListener(new MouseAdapter() {
            // i metodi qui POSSONO fare riferimento a panel, che è quel JPanel distinto per ciascun ciclo
        });
    
        // .. altro (aggiungi panel dove vuoi)
    }

    Da Java 8 panel può non essere final, prima di Java 8 DEVE essere final.
    Ho provato cosi
    codice:
                public void AggiungiPannelli(){
            for (int i = 0; i < 8; i++) {
                JPanel panel = new JPanel();
                panel.setBackground(Color.BLACK);
                panel.addMouseListener(new MouseAdapter() {
    @Override
                    public void mousePressed(MouseEvent e) {
                        panel.setBackground(Color.RED);
                    }
    @Override
                    public void mouseReleased(MouseEvent e) {
                        panel.setBackground(Color.BLACK);
                    }
                });
                pannelli.get(i).add(panel);
            }
    in questo modo non mi da righe con errori quando lo avvio, ma poi non parte più non si apre nemmeno il frame e la console mi dice:

    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.rangeCheck(ArrayList.java:653)
    at java.util.ArrayList.get(ArrayList.java:429)
    at showgame.Playground.AggiungiPannelli(Playground.java:443)
    at showgame.Playground.DisegnaPiramideIniziale(Playground.java:421)
    at showgame.Playground.initialize(Playground.java:814)
    at showgame.Playground.<init>(Playground.java:78)
    at showgame.Playground$1.run(Playground.java:68)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessI mpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
    at java.awt.EventDispatchThread.pumpOneEventForFilter s(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarch y(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da mike1991 Visualizza il messaggio
    codice:
                pannelli.get(i).add(panel);
    Semplicemente

    pannelli.add(panel);


    P.S. Per cortesia NON postare codice "colorato"! Copialo prima in Notepad/Notepad++/ecc.. poi da lì lo ricopi e solo dopo lo incolli qui sul forum.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Semplicemente

    pannelli.add(panel);


    P.S. Per cortesia NON postare codice "colorato"! Copialo prima in Notepad/Notepad++/ecc.. poi da lì lo ricopi e solo dopo lo incolli qui sul forum.
    Hai ragione funziona cosi, che stupido sono stato... grazie mille veramente...

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.