EDITEUR DE COURBES

cs_calogerogigante Messages postés 28 Date d'inscription jeudi 10 juillet 2003 Statut Membre Dernière intervention 25 octobre 2009 - 25 juin 2010 à 16:10
 attar - 21 sept. 2014 à 13:55
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/51948-editeur-de-courbes

excellent travail!..
Salut tout le monde
Merci beaucoup pour cette source
ça va beaucoup m'aider pour mon projet
T'es une sorte de génie lol

A plus ;)
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
6 juil. 2010 à 14:58
Bonjour,

Dans le package utilitaire, beaucoup de classes ne sont pas utilisées, il n'est donc pas indispensable qu'elles soient compilées et intégrées au jar. En revanche, bien que les classes situées dans le package dictionnaire ne soient pas directement référencées, il faut forcer leur intégration dans le jar. En effet, elles sont instanciées par introspection en se basant sur le nom des fonctions saisies : cos, sin, sqrt...

En ce moment, je n'ai plus de temps libre, mais j'ai commencé à travailler sur une nouvelle version, incluant une meilleure gestion des erreurs et des saisies de l'utilisateur. Je la mettrai à jour dès que possible.

Pour le titre de la fenêtre c'est normal ; le fichier EditeurGraphe.java n'est pas à jour (celui du jar est plus récent).
keranroux Messages postés 3 Date d'inscription mardi 31 octobre 2006 Statut Membre Dernière intervention 6 juillet 2010
6 juil. 2010 à 11:51
Bonjour et merci pour tes conseils. Effectivement je compile sans erreur après avoir appliquer ce patch. J'ai généré le jar il se lance bien mais je ne peux tracer aucune équation et la fenêtre de l'application est titrée Fenêtre de test. J'ai comparé les jar et me suis aperçu qu'il y a des écarts significatifs BigFraction.class et FractionLong.class ne sont pas générés, alors que j'ai bien les classes.java. Je n'ai pas embarqué non plus le répertoire Dictionnaire. A ce stade, je pense que le problème est de mon côté. Bon je vais poursuivre les investigations et en tout cas je te remercie pour ton implication.
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
6 juil. 2010 à 09:25
Et bien tu remplaces le contenu de la classe RenduListeCourbes par :

/**
*
* @author guehenneux
*
*/
public class RenduListeCourbes implements ListCellRenderer {

private static final DefaultListCellRenderer RENDU_DEFAUT = new DefaultListCellRenderer();

/**
* la largeur est donnee par la liste contenant la cellule
*/
private static final Dimension DIMENSION_OPTIMALE = new Dimension(0, 20);

private static RenduListeCourbes instance;

/**
*
* @return
*/
public static synchronized RenduListeCourbes getInstance() {

if (instance == null) {
instance = new RenduListeCourbes();
}

return instance;

}

/**
* constructeur prive pour appliquer le patron de conception Singleton
*/
private RenduListeCourbes() {

}

@Override
public Component getListCellRendererComponent(
JList courbes, Object courbe, int indexCourbe,
boolean courbeSelectionnee, boolean focus) {

JLabel cellule = (JLabel) RENDU_DEFAUT.getListCellRendererComponent(
courbes, courbe, indexCourbe, courbeSelectionnee, focus);

if (courbe != null) {

cellule.setForeground(((Courbe) courbe).getCouleur());
cellule.setPreferredSize(DIMENSION_OPTIMALE);

}

return cellule;

}

}

Ça devrait corriger au moins quelques erreurs. Si tu en as d'autres, dis-le moi. Il ne faut pas avoir peur d'installer le jdk 1.7, il fonctionne bien et la jvm est sensiblement plus rapide. Après si tu utilises ton PC pour le boulot c'est peut-être déconseillé.
keranroux Messages postés 3 Date d'inscription mardi 31 octobre 2006 Statut Membre Dernière intervention 6 juillet 2010
5 juil. 2010 à 18:05
Merci pour ta réponse, mais je ne vois pas au travers de ton exemple ce qu'il convient réellement de faire comme modifs. D'un autre côté j'hésite aussi de passer à 1.7b. Cordialement.
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
5 juil. 2010 à 16:16
En ce qui concerne JavaCC, il ne sert qu'à générer les classes constituant le parser de fonctions à savoir :

CompilateurFonction.java
CompilateurFonctionConstants.java
CompilateurFonctionTokenManager.java
ParseException.java
SimpleCharStream.java
Token.java
TokenMgrError.java

Une fois qu'elles sont générées, on n'a plus besoin de JavaCC. En revanche si tu t'y connais un peu et que tu veux modifier la grammaire, tu dois éditer le fichier grammaire_fonction.jj et regénérer les classes du parser avec JavaCC. J'ai mis un batch pour ça : generer_compilateur_fonction.bat
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
5 juil. 2010 à 16:12
Oui, tu es la deuxième personne à me signaler ce problème. Il faut savoir que j'ai développé et compilé avec le jdk 1.7 (beta), ça peut être la cause de ce problème, bien que la javadoc de 1.7 ne mentionne pas non plus de paramètre de généricité pour l'interface ListCellRenderer. Bah écoute il faut l'enlever et faire les modifications qui s'imposent, notamment remplacer Courbe par Object et faire les cast si nécessaire.

un truc du style :

/**
 * 
 * @author guehenneux
 * 
 */
public class CopyOfRenduListeCourbes implements ListCellRenderer {

private static final DefaultListCellRenderer RENDU_DEFAUT = new DefaultListCellRenderer();

/**
 * la largeur est donnee par la liste contenant la cellule
 */
private static final Dimension DIMENSION_OPTIMALE = new Dimension(0, 20);

private static CopyOfRenduListeCourbes instance;

/**
 * 
 * @return
 */
public static synchronized CopyOfRenduListeCourbes getInstance() {

if (instance == null) {
instance = new CopyOfRenduListeCourbes();
}

return instance;

}

/**
 * constructeur prive pour appliquer le patron de conception Singleton
 */
private CopyOfRenduListeCourbes() {

}

@Override
public Component getListCellRendererComponent(
JList courbes, Object courbe, int indexCourbe,
boolean courbeSelectionnee, boolean focus) {

JLabel cellule = (JLabel) RENDU_DEFAUT.getListCellRendererComponent(
courbes, courbe, indexCourbe, courbeSelectionnee, focus);

if (courbe != null) {

cellule.setForeground(((Courbe) courbe).getCouleur());
cellule.setPreferredSize(DIMENSION_OPTIMALE);

}

return cellule;

}

}


Merci pour ton commentaire.
keranroux Messages postés 3 Date d'inscription mardi 31 octobre 2006 Statut Membre Dernière intervention 6 juillet 2010
5 juil. 2010 à 11:28
Ton programme fonctionne bien est semble bien structuré. Suis pas un expert Java, mais sais quand même à peu près compiler et là je bloque la compilation sur des erreurs du style :

.\fr\guehenneux\graphe\presentation\courbe\RenduListeCourbes.java:18: type javax.swing.ListCellRenderer does not take parameters

Fallait-il mettre JavaCC dans la boucle de compil préalablement.

Pour info j'utilise le jdk1.6.0_20

Merci to ta réponse
Utilisateur anonyme
27 juin 2010 à 00:15
Impec' !! Je n'ai pas encore regarder les sources, mais c'est très intéressant.

Mais plutôt que d'un programme qui calcule des courbe avec des fonctions qu'on lui donne, est-ce que un programme qui calcule la fonction correspondante d'une courbe données, ne serais pas une bonne idée aussi...

On pause N points (X,Y et éventuellement Z pour les dingo) sur un graphe et on récupère la fonction correspondante!!

Bon ok, je sort -->[]
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
26 juin 2010 à 18:13
bah écoute... j'avoue que je pige pas. Supprime le <Courbe> dans la classe RenduListeCourbe et adapte le code En fonction. C'est sans doute du Java 1.7
cs_calogerogigante Messages postés 28 Date d'inscription jeudi 10 juillet 2003 Statut Membre Dernière intervention 25 octobre 2009
26 juin 2010 à 08:39
Voici 3 screenshots qui permettent de montrer les erreurs qui m'empêchent de compiler tes sources sous NetBeans 6.8 et avec le JDK 1.6. :

http://img69.imageshack.us/img69/9196/editeurgrapheerreur01.jpg
http://img293.imageshack.us/img293/1933/editeurgrapheerreur02.jpg
http://img295.imageshack.us/img295/4676/editeurgrapheerreur03.jpg

Je vois que tu parles de JavaCC plus haut, faut-il incorporer cette bibliothèque pour que tout fonctionne ?
cs_calogerogigante Messages postés 28 Date d'inscription jeudi 10 juillet 2003 Statut Membre Dernière intervention 25 octobre 2009
25 juin 2010 à 20:44
Oui, j'ai aussi oublié la note : voilà, 8/10.
Merci pour ta proposition d'aide, je te tiens au courant pour les erreurs dans les 2 fichiers dès que j'aurais eu le temps d'y chipoter (j'ai aussi le JDK 1.6).
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
25 juin 2010 à 20:27
J'avais oublié la note
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
25 juin 2010 à 20:06
@calogerogigante
C'est bizarre, chez moi ça compile sans erreur / Java 1.6 & Java 1.7. Seulement des warnings dans les classes générées par JavaCC.
N'hésite pas à me contacter si tu n'arrives pas à corriger le problème.

@Julien39
Merci pour tes remarques!

Pour la touche entrée j'imagine que ça peut être déroutant, c'est pour cette raison que je l'ai signalé dans le commentaire, je pense en rajouter une pour la panneau qui définit la fenêtre du graphe, ainsi qu'un bouton pour ajuster la fenêtre par défaut. Mais pour les autres champs je vais laisser ça en l'état. L'autre possibilité serait d'ajouter un DocumentListener afin de mettre à jour au cours de la saisie, mais ça peut être perturbant aussi.
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
25 juin 2010 à 17:08
Bonjour,

Esthétiquement ce programme est très très bien fait, et marche impec. Même remarque pour la touche entrée, un bouton de plus aurait été sympa mais c'est vraiment très bien.

Juste un petit problème je trouve, l'organisation des packages n'est par top...

9/10
cs_calogerogigante Messages postés 28 Date d'inscription jeudi 10 juillet 2003 Statut Membre Dernière intervention 25 octobre 2009
25 juin 2010 à 16:10
Merci pour cette source.
Je projetais de faire un truc similaire dans les jours qui viennent, et je vais analyser ton code pour avoir ainsi un exemple concret de comment on peut réaliser un joli petit traceur de graphe.

J'ai juste un petit soucis : je travaille avec la dernière version de NetBeans, et j'ai donc importé tes sources dans un projet dédié à ton programme.

Malheureusement, j'ai quelques messages d'erreurs situés dans les fichiers :
package fr.guehenneux.graphe.presentation.courbe / PanneauCourbes.java
package fr.guehenneux.graphe.presentation.courbe / RenduListeCourbes.java

Je vais essayer de voir si je peux gommer ces erreurs moi-même, sinon je reviens vers toi dans ce fil de discussion.

Merci pour cette source sympa dont le jar fonctionne très bien (j'ai juste mis un peu de temps à comprendre que c'est le ENTER qui valide une entrée).

;o)
Rejoignez-nous