Credo che faccia meglio a mostrarvi tutto il codice:
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 Javacodice: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()); } } }.

.
Rispondi quotando
