Faut pas trop se laisser inqui�ter par ces histoires de variable
"final". Si comme je le crois ton probl�me se trouve dans la classe
d�riv�e de ActionListener, l'un des moyens de s'en sortir ici serait
peut-�tre de remplacer la r�f�rence array par une m�thode d'acc�s
String[] getArray().

-----Message d'origine-----
De : A Langueduc [mailto:[EMAIL PROTECTED]]
Envoy� : dimanche 20 janvier 2002 04:23
� : [EMAIL PROTECTED]
Objet : Probleme avec une inner class


Bonjour,
j'ai un probl�me avec une classe inner dans un exercice. Il s'agit d'une

application o� l'utilisateur entre des mots dans une zone de texte et
ces 
mots apparaissent list�s dans une zone d'affichage. Or, chaque fois que 
l'utilisateur entre un nouvel mot, ce mot est ajout� � la liste et la
liste 
est tri�e. Pour ce faire, j'ai besoin d'un tableau � jour de type
String. 
Voici le code:

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class no10_14 extends JFrame //du package javax.swing
{
        private JLabel lPrompt, lResult;
        private JTextField tfInput;
        private JTextArea taOutput;

        public no10_14() //constructor
        {
                super("No. 10_14: This class sorts a list of strings.");

                int maxElements = 100;
                    //cElements = 0; //compter of the actual current
number of elements
                String array[] = new String [maxElements];
                for(int i = 0; i < array.length; i++)
                {array[i] = "";}


                //Declaration of GUI layout:
                Container c = getContentPane();
                c.setLayout(new FlowLayout());

                //Initializing GUI elements:
                lPrompt = new JLabel("Entrer le mot � stocker: ");
                c.add(lPrompt);
                tfInput = new JTextField(25);

                //Coding the action:
                tfInput.addActionListener(
                        new ActionListener() //internal anonymous class
                        {
                                public void actionPerformed(ActionEvent
ae)
                                {
                                        String s =
ae.getActionCommand();
                                        int cElements = 0;

                                        while(array[cElements] != "")
cElements++;

                                        taOutput.append(""); //erase the
ancient list

                                        sortAndAppend(array, s,
cElements);
                                }
                        });

        c.add(tfInput);
        lResult = new JLabel("Voici la liste: ");
        c.add(lResult);
        taOutput = new JTextArea(30, 30); //30 lines and 30 columns
        c.add(taOutput);

        //Sizing the output window and show it
        setSize(400, 400);
        show();
    }//fin du constructeur

        public void sortAndAppend(String array[], String s, int
cElements)
        {
                int i, j;
                String temp;

                array[cElements] = s;
                cElements++;

                if(cElements == 1)
                        taOutput.append(s + "\n");
                else
                {
                        for(i = 0; i < cElements - 2; i++)
                                for(j = i + 1; j < cElements - 1; j++)
                                {
                                        if(array[j].compareTo(array[i])
< 0)
                                        {
                                                temp = array[i];
                                                array[i] = array[j];
                                                array[j] = temp;
                                        }
                                } //array est maintenant tri�

                                for(i = 0; i < cElements - 1; i++)
                                taOutput.append(array[i] + "\n");
                }
        }

        public static void main(String args[])
        {
                no10_14 applic = new no10_14(); //instance de ma classe

                applic.addWindowListener(
                        new WindowAdapter()
                        {
                                public void windowClosing(WindowEvent e)
                                {System.exit(0);}
                        });
        }//fin de main
}//fin de la classe

Quand j'ex�cute le programme, l'erreur suivante m'appara�t:
"Local variable array is accessed from within inner class; needs to be 
declared final".

Or je ne peux pas d�clarer mon tableau final, car il n'est pas constant
et 
il change continuellement. Je ne peux non plus le d�clarer � l'int�rieur
de 
la inner class, car son but est justement celui de stocker la liste donc
il 
ne peut pas �tre initialis� chaque fois que l'utilisateur entre un mot, 
sinon les mots pr�c�dents seraient perdus. Comment faire donc ? Pourquoi
une 
classe inner ne peut pas utiliser une variable d�clar�e dans une port�e 
sup�rieure ?

Merci
Alphonse Langu�duc

_________________________________________________________________
Chat with friends online, try MSN Messenger: http://messenger.msn.com

Répondre à