Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1708 connectés 

 


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 ...

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


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

Roco a écrit a écrit :

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?  




 
ben l'association entre les composant graphique et leur listener, tu peux le faire dans le constructeur ... je vois pas le problème.
 
De toute façon, les constructeur des objets graphiques sont toujours énomes !

benou

Roco a écrit a écrit :

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?  




 
public, ca veut dire que tout le monde peut l'utiliser => n'importe quel objet qui possedera une référence vers ton objet pourra le modifier. En fesant un truc du style projet.tracer = null;.
bref c'est carrement dangereux de rendre des attribut public ! faut pas faire ca au hasard ! En pratique, on ne le fait jamais, sauf si l'attribut est final (constant) et immutable.
 
Le fait qu'il ne soit pas public n'empechera pas de l'utiliser : tu pourras l'utiliser dans ta classe. Si il est protected, tu pourras l'utiliser également dans les classes héritant de ta classe.
 
il me vient à l'idée que tu voulais peut-être justement utiliser ces composants depuis d'autres objet, mais c'est pas une bonne idée. Si tu veux récupérer le texte de ton TextField, il faut que tu rajoutes une méthode à ta classe qui s'occupe elle même de retourner le texte contenu dans le textfield.

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

Roco a écrit a écrit :

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".  




lesquelles ?

Kahyman

DarkLord a écrit a écrit :

http://econf.sourceforge.net
 
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  




 
Ok,
 
De notre cote l'application se presente en 4 parties :
 
1) SWEETT Serveur qui a plusieurs fonctions dont les principales sont attendre la connexion du prof / des eleves et loguer tous les changements de slides et avertir les personnes connectees. D'autres fonctionnalites comme un chat, possibilites d'interevention des eleves, etc... sont egalement disponibles.
 
2) SWEET Client utilise par le prof qui est un browser qui communique avec le serveur et qui permet l'exploitation des fonctionnalites de celui-ci.
 
3) SWEETT Applet qui communique avec le serveur et est utilisee par les eleves : elle permet le lancement de l'ecoute audio et charge les differentes slides dans le browser de l'eleve. Elle permet egalement de faire du chat, d'afficher les differentes videos, etc...
 
4) SWEETT Control : qui permet de controler tout l'enregistrement, les flux video, audio, le postprocessing de configurer le serveur, d'ajouter des cours, configurer les flux realaudio, controller le switch audio et la table de mixage, etc...
 
La video n'est disponible que lors du live, l'applet n'est donc necessaire que lors du live, apres le postprocessing, les slides sont archivees sur le serveur web et le flux audio est synchronise avec les slides : l'eleve, pour ecouter et regarder un cours archive, n'a besoin que d'un lecteur realaudio qui lui charge automatiquement les slides... Cote serveur : seul un serveur realaudio et un serveur web sont necessaires.
 
J'ai de nombreuses idees pour l'amelioration du tout (les 3 premieres parties ont entre 3 et 5 ans...) comme le passage au SMIL pour l'integration d'autres informations au flux video, l'enregistrement de sequences video, le merge de SWEET Client et SWEETT Control, utilisation d'une BDD et Servlets / JSP pour la gestion des pages (la elles sont generees en html... pas eu le temps de le modifier : le projet n'a jamais ete finance et on a fait ca pour le fun), etc...
 
Il faut savoir que l'outil est automatise a 100% en ce qui concerne toutes les manipulations sur les flux, l'archivage, etc... Tu peux l'utiliser de n'importe ou sur la planete uniquement en possedant SWEETT Client : seule une personne lancant le serveur est necessaire. On l'a fait entre autres depuis la Grece, l'Allemagne et Chypre :) Faut dire que c'est fun.
 
Le cote le plus interessant est que tu n'as besoin de rien DL : tu cliques sur l'url du flux realaudio et ensuite tu avances, recules et les slides sont synchronisees avec le son.
 
:)

 

[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 a écrit a écrit :

merci... et promis jvais faire des efforts pour le nommage!  




ouais ! c'est obligé, parce que la c'est illisible !!!
un lien util : http://java.sun.com/docs/codeconv/index.html

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
 
 

Code :
  1. import javax.swing.*;
  2. import java.awt.*;
  3. public class Projet
  4. private JFrame Fenetre;
  5. private JPanel Contenu;
  6. public Projet() {
  7. //déclaration et création de la Fenetre   
  8. Fenetre=new JFrame();
  9. Fenetre.setTitle("Projet" );
  10. Fenetre.setSize(820,595);
  11. Fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
  12. //déclaration et création du cadre Contenu
  13. Contenu=new JPanel();
  14. //ajout des composants au cadre Contenu
  15. //ajout du cadre Contenu à la Fenetre
  16. Fenetre.getContentPane().add(Contenu);
  17. //affichage de la Fenetre
  18. Fenetre.setVisible(true); 
  19. }
  20. public static void main(String args[])
  21. {
  22.     new Projet();
  23. }
  24. }

 

[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

Kahyman a écrit a écrit :

Bah 3 mois c'est le temps necessaire pour apprendre a se debrouiller



heu ... la je suis pas d'accord !
elle va arriver à coder des trucs , ok. Mais de la à maîtriser le langage ...
 
quand je retrouve des progs que j'ai fait dans mes débuts avec Java j'ai honte ! ;)

darklord

Kahyman a écrit a écrit :

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...  




 
ETTTTT Ca m'intéresse. TU fais des cours online? Ca t'intéresse une solution gratuite qui archive les cours automatiquement? Si oui, msg moi et on en parle.

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

DarkLord a écrit a écrit :

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 ...  




 
Ca y est, tu as acquis le reflexe ! ;) :hello:
 
perso, quand j'ai commencé le Java, j'ai lu les 2 premiers tomes de Thinking in Java (version anglaise) en 1 week-end. Bon, ok j'ai pas fait grand chose d'autre du week-end :D, mais ca m'a bien aidé au début. L'idéal, c'est ensuite de pratiquer régulièrement le java pendant quelques mois, puis de le relire un coup, et là tu comprend toutes les subtilités qui t'avaient échapé à la 1ere lecture et qui sont vraiment importantes.
 
c'est mon conseil pour tout débutant en Java.

 

[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

Roco a écrit a écrit :

jdemande qu'à apprendre et je m'en vais de ce pas sur eyrolles.com m'acheter un bouquin sur la prog orienté objet.  




 
Resalut,
 
Evite eyrolles si possible. Euh... evite les bouquins en francais :) C'est triste a dire mais en regle generale il ne sont pas terribles :(
 
Si l'anglais ne te fait pas peur essaye de faire tes emplettes du cote des editions Wiley Computer Publishing (John Wiley & Sons, INC) ou des bouquins issus des Java Series (editions Addison Wesley, Pearson education sauf erreur). Comme reference les O'reilly sont un "must have". Pour Swing j'ai apprecie "Up to speed with Swing, User interfaces with JFC" de Steven Gutz (editions Manning).
 
Une fois que tu seras plus au clair avec l'OO et que tu te poseras des questions sur "comment architecturer ton application de maniere concise et flexible" va jeter un oeil a un bouquin comme "Java Design : Objects, UML, and Process" (Kirk Knoernschild). Je trouve ce dernier particulierement reussi.
 
Pour ne pas devoir depenser une fortune cherche si les bouquins ne sont pas disponibles online (les javaseries le sont pour certains). Rends toi dans la bibliotheque de fac la plus plus proche et cherches un peu.  
 
Bonne chance et n'hesite pas a poser des questions !

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 a écrit a écrit :

 
 
Mon appli se décompose en 5 panel qui sont dans 5 classes différents pour ajouter de la lisibilité à mon prog, jvois donc pas le pb.
 
Maitenant que mes boutons soient static cela ne me dérange pas car de toutes façons ils sont uniques...
 




 
Derniere chose : 5 panels oui, mais aucune methode pour acceder aux champs... toutes les classes peuvent faire ce qu'elles desirent sur tes variables.
 
Bien sur que si tu mets tout en public static ca va marcher si tu restes avec un seul thread et si tu es sur que tu vas toujours utiliser ton application comme tu l'indiques.
 
Maintenant ton design est moche, tes classes n'ont pas d'interfaces (au sens semantique du terme et non au sens java) claires et propres, etc... Lorsqu'on code il faut le faire bien sinon tu vas te retrouver un jour ou l'autre avec l'obligation de tout recoder.
 
Tu codes pour que ca marche en te disant "ca me faiche de faire autrement car ca me suffit"... C'est minimaliste comme approche.

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 a écrit a écrit :

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!  




 
Ce n'est pas le "new Somme()" qui me gene, mais le "JPanel Somme = new Somme()"...
 
Tu devrais utiliser :
 
Somme somme = new Somme(); // pourquoi utiliser le polymorphisme ? Une instance de Somme est un JPanel... Pas besoinm de te compliquer la vie : non seulement ca ralentit ton code (va chercher a chaque fois la methode / le champs de la classe parente) mais en plus ceci risque de t'obliger a faire des class casts par la suite... De plus la majuscule au nom de variable est dangereuse comme je l'ai explique dans le precedent post.

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

Citation :

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


c normal, ce sont des constructeurs...
 
En fait c'est simple, ma calculatrice se décompose en 5 panels que j'ai surchargé dans des classes différents afin de n'avois qu'à les appeler ds main().
 
Par exemple, j'ai créer une classe Tracages avec un constructeur qui est un panel qui contient 3 éléments : 2 checkbox et 1 bouton...
 
Mon appli se décompose en 5 panel qui sont dans 5 classes différents pour ajouter de la lisibilité à mon prog, jvois donc pas le pb.
 
Maitenant que mes boutons soient static cela ne me dérange pas car de toutes façons ils sont uniques...
 
De plus j'ai bien ma classe Courbe pour séparer la logique MVC...
 
Franchement, j'ai pas eut assez de cours, ça c'est un fait (je fais un DUT SRC pas INFO), mais chez moi jbosse avec des bouquins et jvois vraiment pas pkoi tu considères que mon appli est si tordu... tu me fais vraiment peur!
 
Si quelqu'un d'autre à son avis dessus...

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!)

Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR