J'ai créé un JPanel dont les composants sont disposés suivant un GroupLayout. Dans une case de celui-ci, j'ai placé un objet de type 'JFileChooser', mais à demeure (= cas B). Il n'y a donc pas de frame pop-up de fileChooser (= cas A), qui n'apparaîtrait que lorsqu'un composant déterminé de GUI dans le GroupLayout est actionné. Il n'y a donc pas de composant parent. Je voudrais qu'en actionnant le bouton 'Open', la chaîne de caractères du path et fichier choisi soit transmise à la partie logique de ma classe contenant ce GUI, plutôt que d'ouvrir le fichier sélectionné.
J'ai lu le document http://docs.oracle.com/javase/tutori...lechooser.html
Dans le paragraphe suivant, j'expose ce que je comprends de la mise en oeuvre d'un 'Action Listener', de sa méthode 'ActionPerformed()' ...
- pour le cas A (pop-up frame. 2 classes : Une pour la frame pop-up de choix de fichier et une autre pour l'objet faisant appel à cette frame)
- et pour le cas B (fileChooser à demeure. Classe unique).
Q1: Quelles erreurs de raisonnement commettrais-je ?
1. Declare an event handler class and specify that the class either implements an ActionListener interface or extends a class that implements an ActionListener interface. For example: public class MyClass implements ActionListener {
Cas A: 'implements ActionListener' est à ajouter à la déclaration de la classe d'où part l'appel de la frame de choix de fichier et qui habrite le code 'event handler'
Cas B: J'ai ajouté 'implements ActionListener' à ma classe :
'public class FichierDonnéesDEntrée extends JPanel implements ActionListener'
2. Register an instance of the event handler class as a listener on one or more components. For example: someComponent.addActionListener(instanceOfMyClass);
Cas A: La classe du 'JFileChooser', qui possède deux Jbutton's ('Open' et 'Cancel'), a pour chacun de ces boutons qqch commeCas B:
Code : Sélectionner tout - Visualiser dans une fenêtre à part openButton.addActionListener(instanceDeMaClasseQuiAppeleLaFrameChoixDeFichier);ne fonctionne pas. 'fileChooser.openButton est erroné et je devrais pouvoir adresser la méthode 'addActionListener()' de fileChooser. Q2: Comment arriver à joindre mon 'ActionListener' et ma fonction 'actionPerformed()' à openButton de mon fileChooser ? C'est la question principale de la présente discussion.
Code : Sélectionner tout - Visualiser dans une fenêtre à part fileChooser.openButton.addActionListener(this);
3. Include code that implements the methods in listener interface. For example:Cas A: Code situé dans la classe d'où part l'appel de la frame de choix de fichier , qui habrite le code 'event handler' et à laquelle on a ajouté 'implements ActionListener'.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public void actionPerformed(ActionEvent e) { ...//code that reacts to the action... }
Cas B: Idem. J'ai implémenté la fonction 'actionPerformed(ActionEvent e)' dans ma classe comportant le GroupLayout et donc fileChooser.
Je constate que je ne peux pas employer 'int returnVal = fileChooser.showOpenDialog(this);'.
'== fileChooser.openButton)' est la seule mention d'erreur que le compilateur persiste à relever : Il ne trouve pas l'objet openButton (devant pourtant exister dans 'fileChooser'). 'private' ?
Au lieu d'ouvrir le fichier sélectionné, mon application requière d'appeller une fonction - populateTable(String pathNomFichier). Un fichier de type propriétaire (CsvFile) est alors créé et les données figurant initialement dans le tableau seront ainsi remplacées par celles du fichier sélectionné.
P.S.: Je dois aussi encore trouver comment effacer tout le contenu d'un tableau existant (MonModèleDeTable) et le remplacer par un nouveau contenu, sans relancer le constructeur MonModèleDeTable.
Merci aux âmes compatissantes ...
Partager