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

    Problema java con JButton e actionListener

    Salve ragazzi,
    da oggi sono bloccato su questo problema. Sto facendo un programma in cui un JFrame deve far vedere un certo numero variabile di JButton.

    Questa è la parte di codice che uso per creare i JButton :

    codice:
    for(int i=0;i<s.length;i++) {
    jb1=new JButton(new ImageIcon(((new ImageIcon(""+path+""+s[i]+".png",""+s[i])).getImage()).getScaledInstance(75, 75, java.awt.Image.SCALE_SMOOTH)));
                jb1.setText(s[i]);
                jp.add(jb1);
    }
    In questo ciclo estraggo da un array delle stringhe che poi andranno a comporre la path per inserire l'immagine nel JButton. Poi faccio .setText e aggiungo al JPanel i JButton.
    Io voglio aggiungere gli actionListener al JButton, ma mi dice che i JButton devono essere dichiarati final. Ovviamente questo comporta un errore nella loro stessa creazione nel ciclo for. Ho provato a cercare un pò su internet, ma non ho trovato nessuna risposta finora.
    Questa è la domanda: per caso c'è un metodo per aggirare questo errore oppure dovrò definire ogni bottono a sè stante(non vorrei fosse quest'ultimo caso poichè sono più di 100 xD )?
    Grazie in anticipo per il vostro aiuto
    Ultima modifica di MItaly; 01-01-2015 a 15:50 Motivo: Tag CODE, sezione errata

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Faresti vedere come staresti cercando di aggiungere il listener? Quel for inoltre dove si trova?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Credo che faccia meglio a mostrarvi tutto il codice:


    codice:
    public class PROVA  {
     
     public static void YourBuilds() {
            Dimension d=new Dimension(710,737);
            Champs k=new Champs();
            String s[]=k.Champs();
            
            double calc=s.length/7.0;
            double calcF=Math.ceil(calc);
            
            final String path=k.dir;
            JFrame jfSaves = new JFrame("Your Builds");
            JButton jb1;
            
            jfSaves.setSize(d);
            jfSaves.setLocationRelativeTo(null);
            jfSaves.setVisible(true);
            jfSaves.setResizable(true);
            jfSaves.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            Container c = jfSaves.getContentPane();
            jfSaves.setContentPane(c);
            JPanel jp=new JPanel(new GridLayout(20,20,(int)calcF,7)); 
            JScrollPane jsp = new JScrollPane(jp,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
            
            ActionListener al=new ActionListener() {
    
                
                public void actionPerformed(ActionEvent e) {
                    
                    JButton source=(JButton)e.getSource();
                    if (source.equals(jb1)){                                   //Qui mi dà errore
                        System.out.println("*");
                    }
                    
                }
            };
            
            for(int i=0;i<s.length;i++) {
                
                jb1=new JButton(new ImageIcon(((new ImageIcon(""+path+""+s[i]+".png",""+s[i])).getImage()).getScaledInstance(75, 75, java.awt.Image.SCALE_SMOOTH)));
                jb1.setText(s[i]);
                jp.add(jb1);
                jb1.addActionListener(al);           
            }
            
            
            
            c.add(jsp);
            jsp.setViewportView(jp);
            c.revalidate();
            
            
            //Ciclo infinito per adattare il jsp al frame
    
            
            boolean g=true;
            try{
            
            while (g){
            
                
                
                
            
        Thread m=new Thread();
            m.wait(1000);
    
            Dimension p=jfSaves.getSize();
            jsp.setSize(p);
            c.repaint();
            c.revalidate();
    
           
            }
            
            }catch(InterruptedException ex){
                System.err.println(ex.getMessage());
            }
    
            
            
            
            
        }
    
        
    }
    Questa classa poi la faccio eseguire nel main. L'errore me lo dà nella riga "if(source.equals(jb1))....." dicendomi "local variable jb1 is accessed from within inner class; needs to be declared final".Come detto prima, non posso definire i JButton final. Se ho fatto degli errori stupidi perdonatemi perfavore, ho ricominciato da poco a programmare in Java .

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.