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
