Sto cercando di implementare la gestione di un evento di una casella di testo nel seguente modo:

codice:
/**
	Crea un frame di ampiezza WIDTH ed altezza HEIGHT, acquisendo la risoluzione video
	lo presenta a partire ad 1/4 delle sue coordinate.
*/
class tesiFrame extends JFrame{
        
        //variabili posizione
        private double x1aw[]=new double[100];	//casuali
        private double y1aw[]=new double[100];
        private int xaw[]=new int[100];	//convertite
        private int yaw[]=new int[100];
        private int kaw; //indice
        
	/**
		Costruttore
		@param takap rappresenta la lunghezza dell'area di lavoro
		@param habap rappresenta l'altezza dell'area di lavoro
		@param Np rappresenta il numero di nodi
	*/
	
	public tesiFrame(int takap, int habap, int Np){
	
...		
		Container contentPane = getContentPane();	//contenitori di pannelli
		
		//rilevatore di eventi
		listener = new NawFieldListener();
		
		//pannello di ricerca
		JPanel bPanel = new JPanel();
		nawField = new JTextField("00",3);
		bPanel.add(nawField);
		generaButton = new JButton("Genera");
		bPanel.add(generaButton);
		contentPane.add(bPanel, BorderLayout.NORTH);		
		
		//pannello grafo
		clumpPanel panel = new clumpPanel(takaaw, habaaw, Naw, xaw, yaw, x1aw, y1aw);
		contentPane.add(panel, BorderLayout.CENTER);
		
	}//tesiFrame
	
	/**
		Imposta il numero di nodi sui valori memorizzati nel campo di testo
	*/
	public void setNodi(){
		try{
			//acquisisce quanto scritto ed elimina gli spazi vuoti
			int num = Integer.parseInt(nawField.getText().trim());
			clump.setNaw(num);
		}catch(NumberFormatException e){
			//non imposta il numero di nodi è errato
			JOptionPane.showMessageDialog(null,"Devi inserire un numero intero!");
		}//catch
		
	}//setNodi
	
	public static final int WIDTH = 500;	//Ampiezza Frame
	public static final int HEIGHT = 400;	//Altezza Frame prima 350
	
	private clumpPanel clump;
	private DocumentListener listener;	private JTextField nawField;
	private JButton generaButton;
	
	/**
		Quando il testo subisce modifiche, viene chiamato uno dei seguenti tre metodi.
		I primi due metodi vengono chiamati se sono stati inseriti o eliminati caratteri.
		Il terzo metodo non viene chiamato per i campi testo.
	*/
	private class NawFieldListener implements DocumentListener{
		public void insertUpdate(DocumentEvent e){ setNodi(); }
		public void removeUpdate(DocumentEvent e){ setNodi(); }
		public void changeUpdate(DocumentEvent e){ }
	}//NawFieldListener
	
}//tesiFrame
in cui l'oggetto private clumpPanel clump usa il metodo clump.setNaw(num) così implementato:

codice:
/**
	Un pannello che visualizza un grafo clump
*/
class clumpPanel extends JPanel{

        private Color col1,col2,col3,col4;	//colori
        private double r;	//raggio
        private int k,l;	//indici
        private double Nd;	//numero nodi casuali
        private int Naw;	//numero nodi
        private int takaaw,habaaw;	//lunghezza area grafo, altezza area grafo
        private int kaw,iaw,jaw,i;	//indici
        //vettori posizione
        private double x1aw[]=new double[100];	//casuali
        double y1aw[]=new double[100];
        private int xaw[]=new int[100];	//convertiti
        private int yaw[]=new int[100];
        
        
	/**
		Costruttore
		@param takap rappresenta la lunghezza dell'area di lavoro
		@param habap rappresenta l'altezza dell'area di lavoro
		@param Np rappresenta il numero di nodi
	*/
	public clumpPanel(int takap, int habap, int Np, int x[], int y[], double xc[], double yc[]){
	
	...
                
	}//clumpPanel
	
                
        /**
        	restituisce la distanza tra la differeza di due punti
        	@param d1 rappresenta un valore di tipo double identicato come un punto
        	@param d2 rappresenta un valore di tipo double identicato come un punto
        	@param d2 rappresenta un valore di tipo double identicato come un punto
        	@param d3 rappresenta un valore di tipo double identicato come un punto
        	@param d4 rappresenta un valore di tipo double identicato come un punto
        */
        public double d(double d1,double d2,double d3,double d4){
          ...
        }//d
        
	/**
		Disegna il grafo
		@param g di tipo Graphics rappresenta un oggetto atto a disegnare immagini e testi
	*/
	public void paintComponent(Graphics g){
		super.paintComponents(g);
                
		....

	}//paintComponent
	
	/**
		Imposta il numero di nodi e la loro posizione;
		@param n numero di nodi
	*/
	public void setNaw(int num){
		Naw = num;
		if(Naw==20){		//se il numero di nodi è 20 genera un numero di nodi casuali
                  Nd=4+46*Math.random();
                  Naw=(int)Nd;	
                }//if
                
                for(kaw=0;kaw<Naw;kaw++){
                  //posiziona i nodi nel piano in modo casuale
                  x1aw[kaw]=Math.random()*(habaaw-30)+15;
                  y1aw[kaw]=Math.random()*(takaaw-30)+15;
                  xaw[kaw]=(int)x1aw[kaw];
                  yaw[kaw]=(int)y1aw[kaw];
                }//for kaw
                
                repaint();
	}//setNaw
	
}//clumpPanel
ma quando compilo il file mi viene visualizzato il seguente messaggio di errore:

codice:
C:\Documents and Settings\Giuseppe\Documenti\Java Source\tesiTest.java:145: tesiFrame.NawFieldListener is not abstract and does not override abstract method changedUpdate(javax.swing.event.DocumentEvent) in javax.swing.event.DocumentListener
private class NawFieldListener implements DocumentListener{
^
1 error
Compilation interrupted
N.B. Si tenga presente che l'implementazione della classe NawFieldListener è stata riprodotta sulla falsa riga di un esempio preso dal libro Java 2 - I Fondamenti della Mc Graw Hill.