|
Dernière réponse | |
---|---|
Sujet : [JAVA - SWING] pb de discussion entre mes éléments... static ? | |
benou | Tu crois pas que tu ferais bien d'apprendre le Java avec un bon bouquin (cf signature) plutot que de poser des questions pour chaque petit problème que tu te poses ??
tu gagnerais du temps ... |
Aperçu |
---|
Vue Rapide de la discussion |
---|
benou | Tu crois pas que tu ferais bien d'apprendre le Java avec un bon bouquin (cf signature) plutot que de poser des questions pour chaque petit problème que tu te poses ??
tu gagnerais du temps ... |
benou |
|
benou |
|
Roco | :bounce: Upeuuux !!!
et en plus ça me fait chier à chaque fois que je fais un copier-coller de mon prog vers hardware l'alignement par en sucette!!! |
Roco | J'ai donc un nv pb avec mes écouteurs :
Voilà ma classe Projet : import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Projet { public JTextField champharmonique; public JButton tracer; public Projet() { //création de la Fenetre JFrame fenetre=new JFrame(); fenetre.setTitle("Projet" ); fenetre.setSize(820,595); fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ... //création du panel Tracage JPanel tracage=new JPanel(); tracage.setPreferredSize(new Dimension (400,150)); tracage.setLayout(new BorderLayout()); JPanel hauttracage=new JPanel(); JPanel milieutracage=new JPanel(); JPanel bastracage=new JPanel(); JCheckBox mafonction=new JCheckBox("Fonction",true); JCheckBox sommespartielles=new JCheckBox("Sommes partielles",false); tracer=new JButton("Tracer" ); tracer.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("Tracer" ); Courbe.setHarmonique(champharmonique.getText()); } }); tracage.add(hauttracage,BorderLayout.NORTH); tracage.add(milieutracage,BorderLayout.CENTER); tracage.add(bastracage,BorderLayout.SOUTH); hauttracage.add(mafonction); milieutracage.add(sommespartielles); bastracage.add(tracer); ... } ... public static void main(String args[]) { Courbe macourbe=new Courbe(); new Projet(); } } Voilà ma classe Courbe : public class Courbe { public String type; public String parametre; public String tracage; public String harmonique; public boolean infini; public Courbe() { this.type=""; this.parametre=""; this.tracage=""; this.harmonique=""; this.infini=false; } public void setHarmonique(String harmonique) { this.harmonique=harmonique; } public String getHarmonique() { return harmonique; } } et j'ai une erreur à la compile : C:\Documents and Settings\Administrateur\Mes documents\Projet Calculatrice\v2\Calculatrice\Projet.java:76: non-static method setHarmonique(java.lang.String) cannot be referenced from a static context Courbe.setHarmonique(champharmonique.getText()); ^ 1 error Alors est-ce qu'il faut mettre mon écouteur ailleurs que ds le constructeur (et comment faire)? ou est-ce un autre pb? |
Roco | dans le cas du programme que je viens d'écrire ou dois-je mettre les écouteurs d'évenements alors?
je ne vais quand même pas les mattre ds le constructeurs si? |
Roco | Heu Benou, si jamais je fais comme tu as dit et que je met les éléments qui ne me servent pas par la suite dans le construteur au lieu de les mettre en attribut.
Du coup y'a plus besoin d'utiliser de "protected" car les attributs qui vont rester va falloir que je les mette en public pour pouvoir les utiliser non? |
Roco | merci bcp, je corrige cela de suite! :ange: |
benou | c'est mieux, mais y a encore 2,3 trucs qui sont pas top ...
- déjà, tes variables avec une majuscule au début !! :gun: ;) - ensuite, ca ne sert à rien de définir comme attribut tous les éléments qui composent ton interface. Il ne faut mettre que ceux dont tu te servira par la suite (ex : les boutons, textfield, etc ...). Les autres, tu les déclares juste dans le constructeur. - ensuite, par habitude je met les attributs des calsses en protected plutot qu'en private : ca permet de pouvoir surcharger ta classe par la suite ... certains diront que c'est moins efficace, mais bon :sarcastic: ensuite les détails : - Fenetre.getContentPane().add(Contenu); ca sert à rien : autant faire fenetre.setContentPane(contenu); - c'est pas forcément une mauvaise idée de passer la taill de ta fenêtre au paramètre du constructeur ... tu peux ensuite rajouter un constructeur par défaut qui appele l'autre constructeur en spécifiant des tailles par défaut. voila. pour quelques remarques. Ensuite, un prog c'est toujours améliorable, mais bon ... les trucs les plus moches seront déjà plus là ! ;) |
benou | ben moi j'ai pris l'habitude de faire comme ca :
public void truc () { ... } et je préferre largement ! sinon, dans le cas des if/else ca te prend beaucoup plus de ligne et ca rend le truc moins lisible : if (machin) { ... } else if () { ... } else { ... } sinon, le fait de ne pas déclarer les attribut de la classe sur la même ligne, ca permet de voir les différents attribut de la classe plus rapidement : 1 par ligne. Ca évite de "louper" un attribut parce qu'il était déclaré sur la même ligne ... sinon, il faut à tout prix que tu perde cette habitude de commencer le nom de tes variables par une majuscule !!!!!!!! VRAIMENT !!! ;) je jette un coup d'oeil à ton interface si j'ai 2 min ... |
Kahyman | Incroyable.. mais enleve les majuscules de tes noms de variables !
Les classe prennent un nom qui commence par une majuscule, les instances par une minuscule. [jfdsdjhfuetppo]--Message édité par Kahyman--[/jfdsdjhfuetppo] |
Roco | genre quand on écrit pour une méthode : public void mettreGras() { ... ... } jtrouve ça plus logique de faire : public void mettreGras() { ... ... } ou sinon faire : private JPanel Ecran; private Jpanel Moniteur; au lieu de faire : private JPanel Ecran, Moniteur; Benou tu pourrais jetter un coup d'oeil sur mon interface : http://eric.ledonge.free.fr/archives/Projet.txt et sur l'ancienne version, pour me dire si c'est mieux? |
benou |
|
Kahyman |
[jfdsdjhfuetppo]--Message édité par Kahyman--[/jfdsdjhfuetppo] |
Roco | jviens de mettre une autre version de mon prog, si vous pouvez jetez un oeil, c'est juste un fichier txt...
http://eric.ledonge.free.fr/archives/Projet.txt jtrouve pas ça vraiment plus clair... jréférai ma version avec plusieurs constructeurs... Dites-moi tout!!! |
Roco | merci benou jviens de le lire et c'est intéressant, jvais tenter de les respecter même si des fois jles trouve un "peu stupide". Enfin fo faire komme les autres, si je prog tout seul ds mon coin ça sert à rien!
Par contre je galère encore pas mal pour mon projet, est-ce que quelqu'un pourrait m'envoyer un ptit projet en swing (genre une calculette, un ptit jeu...) pour que cela me serve un peu d'exemple de construction de GUI? |
benou |
|
Roco | merci... et promis jvais faire des efforts pour le nommage! |
darklord | tout simplement parce que tu définis ta fenetre dans ton main banane !!!
Ta méthode main est statique --> tu ne peux accéder que des choses statiques dans cette méthode. Lorsque tu es dans main tu n'as pas encore créer d'instance de ta classe Projet (nom débile d'ailleurs) Voici la correction
[jfdsdjhfuetppo]--Message édité par DarkLord--[/jfdsdjhfuetppo] |
Roco | Pouvez-vous m'expliquer pourquoi cette chose simple ne marche pas? :( import javax.swing.*; import java.awt.*; public class Projet { private JFrame Fenetre; private JPanel Contenu; public static void main(String args[]) { //déclaration et création de la Fenetre Fenetre=new JFrame(); Fenetre.setTitle("Projet" ); Fenetre.setSize(820,595); Fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //déclaration et création du cadre Contenu Contenu=new JPanel(); //ajout des composants au cadre Contenu //ajout du cadre Contenu à la Fenetre Fenetre.getContentPane().add(Contenu); //affichage de la Fenetre Fenetre.setVisible(true); } } j'ai tjrs les memes erreurs avec Fenetre et Contenu... |
darklord | http://econf.sourceforge.net
Ca n'utilise pas la vidéo du tout. C'est un produit qui enregistre les sessions web en synchronisation avec la voix du prof. En gros tu lance eConf, tu configure ton browser pour utiliser un proxy (locahost - 8001) et tu surfes sur tes slides tout en parlant. A la fin de ton cours tu fermes la session et il va produire, pour chaque session que tu as définis, une archive ZIP. Dans l'archive il y a : 1) Toute ta session web (pour l'instant un surf simple est supporté ... HTML/GIF/JPEG/PNG/JSP/PHP/ASP) on supporte pas encore Javascript et les feuilles de style 2) L'audio comprimée via le format définis pour ta session (mp3, gsm, ...) 3) Une applet java configurée pour la session et qui permets de rejouer le cours dans ton browser En gros, tu fais ton cours, tu termines, il uploade ou copie les archives qqpart et les étudiants n'ont plus qu'à DL et réécouter. Si ca intéresse qqun c'est sur license GPL |
Kahyman | Salut,
Nous avons developpe notre systeme nous meme :) C'est un projet que l'on a mene pour le fun il y a 5 ans dans le groupe : audio synchronise avec la video (2 cameras a la fac de Geneve, et une en allemagne a Bonn (par ligne ATM louee... le prof etait souvent en deplacement a Bonn : il faisait partie de la direction du GMD) et le tout synchronise avec les slides. Le tout est archive et peut etre reproduit tout en restant synchronise :) J'ai refais a partir de zero toute l'interface de controle du systeme et le postprocessing l'ete dernier pour que le systeme marche sur une seule machine. Tout fonctionne sur une seule machine du serveur audio a l'interface de controle en passant par le post procesing, le controle des entrees audio et video (controle d'une table de mix) et tout est automatise :) On n'utilise plus vraiment le systeme car ca nous prend du temps (4 cours par semaine, il faut lancer le post processing, etc... et on bosse tous sur d'autres projets plus importants...), mais bon c'est rigolo :D En plus ca ma valu une semaine au soleil a Chypre vu que j'ai fais les modifications pour la Fac de Nicosie : j'ai bosse une demi journee a installer le systeme et le reste du temps visite et plage :lol: Enfin si j'ai du temps je recoderai le tout cet ete pour que le systeme soit integre a 100% (l'audio est du realaudio, et 2 personnes sont necessaires pour faire tourner le systeme (une en backstage car on garde tout sur k7 video Hi8... on a 3 ans de cours... (on a vire les 2 premieres annees) :lol: )) Mais bon : je n'ai franchement pas le temps en ce moment :lol: C'est quoi ton systeme ? |
benou |
|
darklord |
|
Kahyman | Bah 3 mois c'est le temps necessaire pour apprendre a se debrouiller avec un language pour une personne partant de presque rien et suivant 4h de cours par semaine (et ayant des TPs a rendre chaque semaine).
Sinon si ca t'interesse Roco : dans une semaine les cours recommencent a la fac de Geneve et le cours de POO sera archive et diffuse online (son synchronise avec les slides du prof) (pas sur, on le fait depuis 5 ans et ca prend du temps pour tout preparer...), dans le pire des cas les polycopies du cours (POO dans sa generalite) devraient etre disponibles online ainsi que ceux du seminaire (consacres a Java eux) dont je m'occupe. Eventuellement je pourrais te donner l'url ou trouver les polycops... |
benou |
[jfdsdjhfuetppo]--Message édité par benou--[/jfdsdjhfuetppo] |
darklord | sinon de manière générale, Thinking in Java de Bruce Eckel (gratos sur www.BruceEckel.com et traduction francaise sur http://penserenjava.free.fr)
Mais il faut bcp de temps et de patience. Meme si il est assez agréable à lire il faut y passer de longues heures pour voir le résultat ... |
Kahyman |
|
darklord | Eric,
On en a déjà parlé suffisament sur MSN et je rejoins totalement l'avis Kahyman que je salue au passage ( :jap: total respect). Très bon post que tu as pondu là cher ami :) Là où je rejoins particulièrement son avis c'est sur le fait que tu ne programmes absolument pas en objet puisque les méthodes / attributs statique sont un peu contre la philosophie OO mais quand meme supporté pour des raisons pragmatiques. Donc là où tu crois bien faire, tu violes simplement les principes OO avec un language OO. Donc ca ne peut etre que faux. Tu dois plutôt réfléchir à ce que ton panel va faire. Quelles sont les choses que l'utilisteur est suceptible de faire et quel va en etre le résultat. Typiquement si tu as une classe Manager qui va crée tes 5 panels, tu peux passer ce manager en référence de chacun de tes panels. Ensuite ce manager peut offrir des méthodes publiques qui va te permettre d'interagir, au sein d'un panel, avec les autres. Ainsi tu peux te focaliser sur un panel à la fois et déterminer ce qu'il est censé fournir comme fonctionnalités. Pour la suite, tu laisses le manager se débrouiller. En bref, Crée tes panels un à un Qu'est ce qu'un panel offre comme fonctionnalité publique (par exemple le champ qui contient le résultat du cacul doit offir une méthode pour changer la valeur du champ en question) Qu'est ce qu'un panel est suceptible de communiquer comme infos aux autre panels. Réfléchis à ce qu'un manager peut faire dans l'histoire. |
Roco | jdemande qu'à apprendre et je m'en vais de ce pas sur eyrolles.com m'acheter un bouquin sur la prog orienté objet. |
Kahyman |
|
Roco | nan jte rois sur parole, mais bon chui de plus en plus malmené... jfais des projets ki marchent et a chaque fois qu'on jette un coup d'oeil au code tout le monde crie en disant ke c'est pas de la POO ou ke ça respecte pas le MVC...
Je desespere, je cherche à continuer mes études en école ou en licence, j'espere ke malgré mon faible nivo en maths (je ne demande qu'à les travailler) on me laissera entrer ds l'un ou l'autre afin de pouvoir vraiment approfondir java! |
Kahyman | Bon je te donne un avis qui me semble objectif vu que c'est mon boulot... Maintenant libre a toi de l'accepter ou non. |
Kahyman |
|
Roco | DSL je ne viens qu'à l'instant de comprendre e sens de mon quote et c'est vrai que sur ce point tu as raison! |
Roco |
|
Kahyman | Salut, Le but de mon message n'est pas de te casser mais de te faire te rendre compte que ton probleme est plus grand que tu ne sembles le croire :( Deja lorsque je commence a lire ton code je vois un gros probleme : JPanel Ecran=new Ecran(); JPanel Fonction=new Fonction(); ... Tes noms de variables ont le meme nom que celui de tes classes ce qui pose probleme par la suite tant pour la lisibilite que pour la logique de ton code (p.ex. Somme.methode() va-t-il avoir pour effet d'appeler la methode methode() de l'instance Somme ou la methode statique methode() de la classe Somme, methode statique qui elle n'existe pas ?)... Ensuite, d'un cote tu crees des instances de tes classes mais de l'autre tu essayes d'obtenir des valeurs statiquement (sans travailler sur l'instance mais directement sur la classe). Tu fais ceci pour pouvoir afficher ton application, mais tu melanges GUI et logique de l'application : grave erreur qui te mene a une application spaghettis. En fait : tu n'utilises pas du tout tes instances en ce qui concerne l'execution du "code reel" de ton application, tu fais tout statiquement : Tes objets ne sont la que "pour faire joli". Bref c'est moche comme facon de coder, tout est visible, tu n'as aucune encapsulation et question securite c'est zero. Avant de definir une variable publique il faut bien reflechir a ton but, de meme quand tu veux creer une variable statique il faut le faire d'autant plus. Plus je lis ton code plus je vois d'erreurs flagrantes... A quoi te sert de creer des classes si tu ne les utilises pas comme telles ? Tu ne fais qu'utiliser tes classes en jouant sur le polymorphisme alors que ca ne te sert a rien... (Somme utilisee en tant que JPanel... pourquoi ? Somme herite des methodes de JPanel et elles ont le meme comportement si tu ne les surcharge pas !) En realite tu ne codes pas du tout en java... ce n'est meme pas de la programmation objet : ou sont par exemple tes methodes d'instance ? :non: Que je devine tu as fais surtout du VB ou autre "language" du meme style avant ? C'est le genre d'erreur courrantes avec des langages qui se disent OO alors que c'est loin d'etre le cas. En realite je vais te donner le premier conseil que tu devrais suivre : balance tout a la poubelle, prends une feuille de papier un stylo et pose tes idees, ton architecture sur papier. C'est ce que je dis a mes etudiants : il faut commencer a coder sur papier avant de toucher a un clavier... Desole mais je ne peux t'aider plus que ca : prend des cours de Java si ca t'interesse de continuer dans cette voie car tu en as besoin : en ce moment c'est un peu n'importe quoi, mais avec des d'exercices et de la patience tu y arriveras : tu as l'air motive et ca c'est l'essentiel. Lis un bon bouquin sur la programmation objet et le design d'applications ainsi que sur les regles et conventions syntaxiques java. Bon j'ai corrige ton code pour qu'il fonctionne, mais je n'ai pas touche a la logique que tu utilises. Si tu veux que je te l'envois passe moi ton email en MP, ceci dit je te conseille de tout recommencer. Amicalement, |
Roco | Bonjour!
Je me rends compte que mon titre est vraiment débile mais bon il ne fait que traduire mon désarroi (poil au doigt). Alors d'entrée jvous dis ke le programme est un ptit peu trop long pour que je le mette en entier alors je l'ai zippé et mis sur mon FTP free. La version 1, c'est la version logique qui ne marche pas : http://eric.ledonge.free.fr/archives/Calculatrice1.zip La version 2, c'est la version illogique qui marche : http://eric.ledonge.free.fr/archives/Calculatrice2.zip Alors le problème c'est que j'ai un JTextField ChampHarmonique (Somme.java) et je veux que quand on appuie sur le JButton Tracer (Tracage.java) et bien le contenu de ChampHarmonique soit mis dans la variable Harmonique (Courbe.java), après j'affiche dans la console la valeur d'Harmonique pour vérifier que mon prog marche bien. Il y a des problèmes du genre "non static ... cannot be referenced ..." et donc la comme un con je modifie un peu mon prog (Version2) en mettant des static partout. Après tout pour moi, il s'agit bien de champs de classe, donc jvois pas le pb... mais tout le monde me dit qu'il ne faut surtout pas faire cela! Et bien que DarLord s'arrache tous les cheveux (il est maintenant presque chauve je pense) à tenter de m'expliquer vainement, je n'y arrive tjrs pas... pouvez-vous m'indiquer la MEUILLEURE façon de faire ce que je viens de vous décrire! SVP : jettez quand même un coup d'oeil sur mon prg avant pour bien voir mon pb... Avis à tous les experts, si en plus ils arrivent à me l'expliquer avec des mots en français (DarkLord sort des expressions belges ou des expressions javanesque de tps en tps alors c'est dur!!!) ce serait encore mieux!!! Attention je suis très difficile pour comprendre (demander à Darklord!) |