Newsgroup: it.comp.java
Titolo: [ Error ?!?!

Ho un programma che non riesco a compilare
mi da l'errore
myCanvasObject.ArrayCon(i) ;     // riga codice
//Quando lo compilo mi da un errore proprio su questa chiamata
//L'errore è:
//Attempt to use a non-final variable myCanvasObject from a different
method.
//From enclosing blocks , only final variables are available
//però se al posto di i metto un intero es 5 il programma funziona
correttamente
Qui è il codice
Se potete indicarmi come posso fare per eliminarlo.
Quest program crea una finestra con un TextField e un area dove si può
disegnare
nel textfield l'utente inserisce un tasto da tastiera , questo dato viene
passato ad una classe che lo elabora lo converte
 e disegna dei quadrati in base al dato  ricevuto come input .
Il problema è appunto qst non riesco a far passare il dato alla classe
myCanvas
//=======================================================//
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
//Subclass JPanel x definire un area per poter disegnare
class MyCanvas extends JPanel{
//definisco un array
public  int [ ] valori =  new int [8] ;
//Procedura che riceve come input un intero poi
//qst intero viene elaborato e disegna dei quadrati
  public void ArrayCon( int e){
 //Elaborazione intero ricevuto in input
 //e "riempie" l'array valori
    }//fine ArrayCont
//Override the paint() method.
//metodo per disegnare dei quadrati in base ai valori dell'array valori
public void paintComponent (Graphics g){
 Color color1 = Color.red;
 Color color0 = Color.magenta;
 int k =0;
 int a = 40;
 int y = 20;
 for ( int i =20 ; i<=200 ; i = i+50) {
 if ( valori [ k ] == 1)
 g.setColor(color1);
 else
 g.setColor(color0);
 g.fillRect( i , y , a, a );
 k++;
}
  }//end paint()
}//end class MyCanvas
//=======================================================//
 class Canvas05 extends JFrame{//controlling class
 public JTextField s ;//definisco s un JtextField
 public MyCanvas myCanvasObject;//definisco myCanvasObject un oggetto
myCanvas
  public static void main(String[] args){
    Canvas05 gigi = new Canvas05();
}//end main
  public Canvas05(){//constructor
   JTextField s = new JTextField(13);  //un label di input
    this.setTitle("Prova ");
    this.setSize(700,700);
//Nuovo oggetto MyCanvas
    MyCanvas  myCanvasObject = new MyCanvas();
//aggiungo un ascoltatore e un aclasse anonima
// per l'ascoltatore KeyListener per il label s
s.addKeyListener( new KeyListener()
{
public void keyTyped(KeyEvent e){
char f= e.getKeyChar();//funzione che mi restituissce il tasto premuto
 int i = (int) f;//converto il tasto nel codice ASCII
//richiamo il metodo ArrayCon che sta all'interno
//di myCanvasObject e gli passo il parametro i
myCanvasObject.ArrayCon(i) ;//ERRORE  ERRORE ERRORE ERRORE ERRORE ERRORE
ERRORE ERRORE
//Quando lo compilo mi da un errore proprio su questa chiamata
//L'errore è:
//Attempt to use a non-final variable myCanvasObject from a different
method.
//From enclosing blocks , only final variables are available
//però se al posto di i metto un intero es 5 il programma funziona
correttamente
}
public void keyPressed(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
}
}
) ;
//Aggiungo un contenitore
//e aggiungo il JTextField e il myCanvasObject
   Container pannello = getContentPane();
   pannello.setLayout(null);
   pannello.add(myCanvasObject);
   myCanvasObject.setBounds(100 , 100 , 400, 400);
   pannello.add(s);
   s.setBounds(30 , 30, 100, 40);
    this.setVisible(true);//make it all visible
    //Instantiate and register Listener object which will
    // terminate the program when the user closes the
    // Frame.
    WProc1 winProcCmd1 = new WProc1();
    this.addWindowListener(winProcCmd1);
  }//end constructor
}//end class Canvas01 definition
//=======================================================//
class WProc1 extends WindowAdapter{
  public void windowClosing(WindowEvent e){
    System.exit(0);
  }//end windowClosing()
}//end class WProc1
//=======================================================//

 Se potete indicarmi come posso fare per eliminarlo.
Leggere il messaggio del compilatore? :)
Dice: "attempt to use a non-final variable myCanvasObject from a different
method. From enclosing blocks , only final variables are available"
Anche se non hai la piu' pallida idea di cosa sia un enclosing block, ti 
dice chiaramente che myCanvasObject e' non-final, e solo variaibili final 
sono disponibili per essere usate in quel punto del codice.
Ergo, dichiara myCanvasObject final.
-- 
Life's something u don't get out alive..
ObjectZone - 
http://space.tin.it/computer/csadun