Titre: [java] actionListener Posté par: the lsd le 07 Novembre 2007 à 11:35:20 Hello all
Etant obligé de faire du java, je suis confronté à un probleme de Listener sur un bouton. Voila comment ca ce passe : Code: import java.awt.* ; Voila, j'ai donc un bouton b qui doit etre écouté, quaf que dans mon void actionPerformed, il ne reconnait pas b. Voila l'erreur : cannot find symbol symbol : variable b location: class layout if (obj.equals(b)) ^ Je bloque depuis ce matin dessus, et le java n'etant pas dans mon top3 des favoris, ca me gave plutot qu'autre chose... Si quelqu'un a une solution, une explication, une idée ou meme 1000 euros a me donner, ca m'arrangerait ! =D Enjoy The lsd Titre: Re : [java] actionListener Posté par: Chilly le 07 Novembre 2007 à 13:10:08 Si tu veux utiliser une variable dans une méthode il faudrait peut être la passer en paramètre...
Titre: Re : [java] actionListener Posté par: Al3x le 07 Novembre 2007 à 13:24:26 Voilà comment doit être ton code :
Code: import java.awt.* ; Titre: Re : [java] actionListener Posté par: the lsd le 12 Novembre 2007 à 08:54:13 Re
J'ai essayé en rajoutant ce que tu m'a dis Al3x, ca me fait une erreur Exept in thread "main" java.lang.NoSuchMethodError: main :/ Chilly ??? Moi y en a pas tout comprendre en java... Pourquoi je devrais la passer en paramètre, et surtout, comment ? Enjoy The lsd Titre: Re : Re : [java] actionListener Posté par: Spaulding le 12 Novembre 2007 à 10:14:00 J'ai essayé en rajoutant ce que tu m'a dis Al3x, ca me fait une erreur Exept in thread "main" java.lang.NoSuchMethodError: main :/ Essaye peut-être un public static void main. Chilly ??? Moi y en a pas tout comprendre en java... Pourquoi je devrais la passer en paramètre, et surtout, comment ? Oh c'est pas vraiment spécifique à Java, les variables globales, locales, tout ça...Titre: Re : Re : Re : [java] actionListener Posté par: _o_ le 12 Novembre 2007 à 14:07:35 Oh c'est pas vraiment spécifique à Java, les variables globales, locales, tout ça... Ohlalala, pourquoi se compliquer la vie ? Moi, je mets tout en global, c'est vachement plus simple. (http://forum.hardware.fr/images/perso/implosion%20du%20tibia.gif) Titre: Re : [java] actionListener Posté par: the lsd le 12 Novembre 2007 à 14:28:24 A la base, le static était mis, mais justement je l'ai enlevé à cause de cette erreur
C:\layout.java:16: non-static variable this cannot be referenced from a static context b.addActionListener(this) ; Pour ce qui est des variables locales, globales, j'ai pas tout callé (bon faut dire que la prof qui nous fait cours ne sait meme pas résoudre mon problème, alors je vais pas lui demander si elle sait passer des paramètres...) Je vais me renseigner sur les parmaètres tout ca tout ca pour l'instant Enjoy The lsd Titre: Re : Re : [java] actionListener Posté par: _o_ le 12 Novembre 2007 à 15:11:07 A la base, le static était mis, mais justement je l'ai enlevé à cause de cette erreur C:\layout.java:16: non-static variable this cannot be referenced from a static context b.addActionListener(this) ; C'est normal. La réponse d'Al3x tenait la route, sauf qu'il a conservé l'architecture de départ, où tout est créé dans le main, ce qui est mal. Ça fait un moment que je n'ai pas touché à awt, mais si je me souviens bien, la bonne manière de faire est de : - créer une classe layout comme tu l'as fait (mais franchement, le nom est très mal trouvé, Layout, ça existe en Java, et les noms de classe commencent par convention par une majuscule). - définir la méthode de création de l'interface graphique, sous je ne sais plus quel nom (en gros, c'est renommer le main() actuel). - implémenter un main qui ne fait qu'instancier un objet de type layout et l'"exécuter" (i.e. l'afficher et le laisser réagir aux stimuli). C'est résumé (et assez flou dans ma tête, maintenant), mais normalement, tu dois trouver facilement la (bonne) manière de faire en consultant des tuto sur awt. Attention, la tendance depuis des années est d'utiliser plutôt swing (do not feed the troll ! :) ). Et garder sous la main : http://java.sun.com/docs/books/tutorial/ :) Titre: Re : [java] actionListener Posté par: the lsd le 12 Novembre 2007 à 15:15:36 Bon avec tout ca, si je n'y arrive pas...
En l'occurence, j'ai remarqué moi meme que tout était dans le main avant que tu poste, donc ca fait un point en moins. A propos du awt/swing j'ai remarqué que awt avait tendance a ne pas etre au gout du jour, mais on en revient à ma prof qui n'est pas non plus au gout du jour... Merci pour les conseils Enjoy The lsd Edit : avec un petit mélange des conseils de _o_ et de ceux d'al3x, j'ai réussi a faire marcher le bignou, bon il reste encore des choses très obscures dans ce code, mais ca va venir... Edit 2 : bon il se lance, mais en fait il listen rien du tout ! Pqs grave je vais trouver ! Titre: Re : [java] actionListener Posté par: Al3x le 12 Novembre 2007 à 19:25:26 Code: public class PanelBoutonsFP extends JPanel implements ActionListener{ C'est une classe qui constituait une partie d'un projet que j'avais fait il y a quelques temps. Ca marche donc ça devrait t'aider ^^ Titre: Re : [java] actionListener Posté par: Nebelmann le 13 Novembre 2007 à 20:55:46 En fait il faut pas tout mettre dans le main... juste un appel au constructeur dans l'idéal :)
Voici ton code qui marche : http://pastebin.com/f5b4c2de9 Le main doit toujours être en static, tu mets en variable membre de la classe tout ce que tu seras amené à utiliser dans diverses fonctions (en général tous tes composants graphiques). Des IDE comme Netbeans font ça automatiquement (mais on nous apprend à coder avec des éditeurs simples, donc faut tout faire à la mimine ^^) EDIT: [20:58] <Chilly> on fout pas n'importe quoi en attribut d'une classe aussi Titre: Re : [java] actionListener Posté par: the lsd le 15 Novembre 2007 à 10:20:44 ok ca marche impec, merci Nebel (et les autres aussi quand meme ^^)
Par contre, je ne vois pas l'interet de mettre ton Button en private, un public est aussi bien non ? Enjoy The lsd Titre: Re : Re : [java] actionListener Posté par: _o_ le 15 Novembre 2007 à 10:33:49 Par contre, je ne vois pas l'interet de mettre ton Button en private, un public est aussi bien non ? Question de conception. As-tu envie qu'une autre classe vienne faire joujou avec le bouton sans te demander ton avis ? Je ne le crois pas. Ou alors, c'est que l'ihm est mal pensée au départ. :) Personnellement, je le mettrais en protected, ce que je fais pour la majorité des attributs en général. Interdiction d'y accéder directement (sauf si je mets un sélecteur public à disposition), sauf pour les classes filles. C'est en général un bon compromis. Titre: Re : [java] actionListener Posté par: the lsd le 15 Novembre 2007 à 10:50:28 Ok c'est bien ce que je pensais, merci de l'info =)
Now, direction la gestion de fichiers ! Enjoy The lsd Edit : Y a t'il un moyen simple de de faire des arborescences avec awt ? |