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

  FORUM HardWare.fr
  Programmation
  Java

  Débutante- Une vraie galère avec ce code

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Débutante- Une vraie galère avec ce code

n°2118294
Java01
Progression
Posté le 25-12-2011 à 19:33:46  profilanswer
 

Bonjour,
Cela fait plus q'une semaine, et je n'arrive pas à voir ce qui cloche dans ce code.
Le code est costituté de 3 classes:
DataPoints: lit un fichier .txt ou sont stockées des valeurs réels. instancie 1 point s'il y a 2 valeurs sur la ligne et une droite s'il y en a 4 valeurs.
Stocke les points dans une arraylist et puis avec la méthode min_max, elle trouve les valeurs maximales et minimales de x et y.
 
La classe dessinsPoints: elle dessine dans une fenêtre ces droites stockées qui doivent être dessinées jusqu'au bord de la fenêtre et elle dessine des rectangles avec la méthode DrawRect autour des points stockés dans DataPoints.
 et puis la classe main Grapheur.
 
Mon problème c'est que la fenêtre s'affiche mais vide.
Aidez-moi SVP.
Merci.
Voici mon code:

Code :
  1. package dataPoints;
  2. import geomD2.PointsD2;
  3. import java.io.FileReader;
  4. import java.io.LineNumberReader;
  5. import java.util.ArrayList;
  6. import java.util.StringTokenizer;
  7. public class DataPoints extends ArrayList<ArrayList<PointsD2>> {
  8. private static final long serialVersionUID = 1L;
  9.     double min_x=0, min_y=0, max_x=0, max_y=0; //coordinn√©es maxi et mini
  10.     //Lecture  
  11.     public DataPoints(String fichier) {
  12. LineNumberReader lecteurLignes = null;
  13. try {
  14.     lecteurLignes = new LineNumberReader(new FileReader(fichier)); //Lecture de la linge courante
  15.     String ligneTexte = null;
  16.    
  17.     while ((ligneTexte = lecteurLignes.readLine()) != null) {
  18.      ArrayList<PointsD2> listePoints = new ArrayList<PointsD2>(); //Cr√©ation de la liste de points
  19.      StringTokenizer st = new StringTokenizer(ligneTexte);
  20.      //Test si il y a deux ou quatre coordonn√©es pour cr√©√© un ou deux point(s)  
  21.      if (st.countTokens() == 2) {
  22.       double x=0,y=0; //coordonn√©es du futur point
  23.    PointsD2 pt = null; //Futur Point vide  
  24.    //lecture de la ligne et stockage des coordon√©es
  25.    while(st.hasMoreTokens()){
  26.     x = Double.parseDouble(st.nextToken()); //lis le premier token et l'affecte √† x
  27.     y = Double.parseDouble(st.nextToken()); //lis le deuxi√®me token et l'affecte √† y
  28.    }
  29.    pt = new PointsD2(x, y); //Cr√©ation du point
  30.    listePoints.add(pt); //ajout du point dans la liste
  31.    min_max(pt); //M√†j des extremums par rapport au point
  32.      }
  33.      if (st.countTokens() == 4) {
  34.       double x1=0, x2=0, y1=0, y2=0; //coordonn√©es des futurs points
  35.       PointsD2 pt1 = null; //Futur premier point vide
  36.       PointsD2 pt2 = null; //Futur deuxi√®me point vide
  37.       //lecture de la ligne et stockage des coordon√©es
  38.       while(st.hasMoreTokens()){
  39.        x1 = Double.parseDouble(st.nextToken()); //lis le premier token et l'affecte √† x1
  40.        y1 = Double.parseDouble(st.nextToken()); //lis le deuxi√®me token et l'affecte √† y1
  41.        x2 = Double.parseDouble(st.nextToken()); //lis le troixi√®me token et l'affecte √† x2
  42.        y2 = Double.parseDouble(st.nextToken()); //lis le deuxi√®me token et l'affecte √† y2
  43.       }
  44.       pt1 = new PointsD2(x1, y1); //Cr√©ation du premier point
  45.       pt2 = new PointsD2(x2, y2); //Cr√©ation du deuxi√®me point
  46.       listePoints.add(pt1); //ajout du premier point dans la liste
  47.       listePoints.add(pt2); //ajout du deuxi√®me point dans la liste
  48.       min_max(pt1); //M√†j des extremums par rapport au premier point
  49.       min_max(pt2); //M√†j des extremums par rapport au deuxi√®me point
  50.      }
  51.     //Ajout de la liste de point √† la liste
  52.     this.add(listePoints);
  53.     }
  54. }
  55. catch(Exception e) { e.printStackTrace(); }
  56.     }
  57.    
  58.     private void min_max(PointsD2 ptExtremum) {
  59.      // trouver les coordonn√©es extr√™mes {min_x}, {max_x}, {min_y},
  60.      // {max_y} des points stock√©s dans le vecteur courant
  61.     if (ptExtremum.getX()<min_x) min_x=ptExtremum.getX(); //M√†j de min_x si existe
  62.     if (ptExtremum.getX()>max_x) max_x=ptExtremum.getX(); //M√†j de max_x si existe
  63.     if (ptExtremum.getY()<min_y) min_y=ptExtremum.getY(); //M√†j de min_y si existe
  64.      if (ptExtremum.getY()>max_y) max_y=ptExtremum.getY(); //M√†j de max_y si existe
  65.     }
  66.     public int getMaxX(){
  67.      //retourne la valeur de max_x
  68.      return (int)max_x;
  69.     }
  70.     public int getMaxY(){
  71.      //retourne la valeur de max_y
  72.      return (int)max_y;
  73.     }
  74. }

 

Code :
  1. package dataPoints;
  2. import geomD2.DroiteD2;
  3. import geomD2.PointsD2;
  4. import java.awt.*;
  5. import java.util.ArrayList;
  6. import javax.swing.JComponent;
  7. import javax.swing.JPanel;
  8. public class DessinPoints extends JPanel {
  9. /**
  10.  *  
  11.  */
  12. private static final long serialVersionUID = 1L;
  13. DataPoints listPts;
  14. int bord; // taille des bords
  15. int enveloppe; // dimension des rectangles
  16. public DessinPoints (DataPoints pts, int largeur, int hauteur, int bord, int enveloppe) {
  17.  this.listPts = pts;
  18.  this.bord = bord;
  19.  this.enveloppe = enveloppe;
  20. }
  21. public void paintcomponent (Graphics g) {
  22.  super.paintComponent(g);
  23.  g.setXORMode(Color.RED);
  24.    Dimension tailleSuivante = new Dimension (this.getSize()); //Affectation de la nouvelle taille de la fen&#8730;™tre
  25.      JComponent tailleOriginal = null;
  26.  @SuppressWarnings("null" )
  27.  double factEchX = tailleSuivante.getWidth()/tailleOriginal.getWidth(); //calcule du facteur de l'&#8730;©chelle sur l'axe X
  28.      double factEchY = tailleSuivante.getHeight()/tailleOriginal.getHeight(); //calcule de facteur de l'&#8730;©chelle sur l'axe Y
  29.      for (int i=0;i<listPts.size();i++){
  30.       ArrayList<PointsD2> ptLu = (ArrayList<PointsD2> )listPts.get(i); //Liste des point courants
  31.       //Test si il a 1 ou 2 point pour l'affichage de ses dernier avec ou sans la droite
  32.       if(ptLu.size()==1){
  33.        //Affichage des points
  34.        g.drawRect((int)(ptLu.get(0).getX().intValue()*factEchX),(int)(ptLu.get(0).getY().intValue()*factEchY),enveloppe,enveloppe);
  35.       }
  36.       if(ptLu.size()==2){
  37.        int milieuPointX1,milieuPointY1,milieuPointX2,milieuPointY2; //Coordin&#8730;©es central des points pour l'affichage central de la droite
  38.        //definition du milieu des points
  39.        milieuPointX1 = ptLu.get(0).getX().intValue()-enveloppe/2;
  40.        milieuPointY1 = ptLu.get(0).getY().intValue()-enveloppe/2;
  41.        milieuPointX2 = ptLu.get(1).getX().intValue()-enveloppe/2;
  42.        milieuPointY2 = ptLu.get(1).getY().intValue()-enveloppe/2;
  43.        //Affichage des points
  44.        g.drawRect((int)(milieuPointX1*factEchX),(int)(milieuPointY1*factEchY),enveloppe,enveloppe);
  45.        g.drawRect((int)(milieuPointX2*factEchX),(int)(milieuPointY2*factEchY),enveloppe,enveloppe);
  46.        //Cr&#8730;©ation de la droite
  47.        DroiteD2 droite = new DroiteD2 (ptLu.get(0),ptLu.get(1));
  48.        //Affichage de la droite
  49.        g.drawLine((int)(droite.getIntersectionX().intValue()*factEchX),0,0,(int)(droite.getIntersectionY().intValue()*factEchY));
  50.       }
  51.      }
  52.     }
  53. }


Code :
  1. import java.awt.BorderLayout;
  2. import javax.swing.JFrame;
  3. import dataPoints.DataPoints;
  4. import dataPoints.DessinPoints;
  5. public class Grapheur {
  6. public static void main(String[] args) {
  7.  DataPoints listePts = new DataPoints ("fichier.txt" );
  8.  System.out.println(listePts);
  9.  DessinPoints monGraphe = new DessinPoints(listePts,600,400,10,10);
  10.  JFrame f = new JFrame();
  11.  f.getContentPane().add(monGraphe);
  12.  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  13.  f.setLayout(new BorderLayout());
  14.  f.add(monGraphe, BorderLayout.CENTER);
  15.  f.setTitle("Grapheur" );
  16.  @SuppressWarnings("unused" )
  17.  int bordure = 0;
  18.  f.setSize(400, 400);
  19.  f.setVisible(true);
  20. }
  21. }

mood
Publicité
Posté le 25-12-2011 à 19:33:46  profilanswer
 

n°2118337
Tamahome
⭐⭐⭐⭐⭐
Posté le 26-12-2011 à 11:39:48  profilanswer
 

un exemple de fichier texte à faire consommer par ton appli peut être ?

n°2118339
gilou
Modérateur
Modzilla
Posté le 26-12-2011 à 12:00:11  profilanswer
 

Citation :

JFrame f = new JFrame();
 f.getContentPane().add(monGraphe);
 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 f.setLayout(new BorderLayout());
 f.add(monGraphe, BorderLayout.CENTER);
 f.setTitle("Grapheur" );

:heink:  
 
Je vois pas trop l'intérêt d'ajouter deux fois le graphe, en utilisant deux syntaxes distinctes (mais équivalentes).
 
D'autre part, ça serait pas plus efficace de poser tout de suite
f.setSize(400, 400);
après la création de la frame?
 
A+,


Message édité par gilou le 26-12-2011 à 12:06:48

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2118344
Java01
Progression
Posté le 26-12-2011 à 12:43:32  profilanswer
 

Merci pour ta réponse gilou.
C'est vrai  que les deux instructions veulent dire la même chose.
je n'avais pas fais attention.
 
Mais pourquoi ma fenêtre est vide et pourquoi j'obtiens dans la console cette écriture:
[[geomD2.PointsD2@3343c8b3], [geomD2.PointsD2@272d7a10, geomD2.PointsD2@1aa8c488]]. sachant que j'utilise Eclipse.
 

n°2118345
Java01
Progression
Posté le 26-12-2011 à 12:48:14  profilanswer
 

Citation :

un exemple de fichier texte à faire consommer par ton appli peut être ?


 
le fichier:
150 200
150 200 150 100
 
j'ai essayé de changer les valeurs mais rien ne s'affiche.
Est-ce qu'il manque quelque chose à ma classe DessinPoints?

n°2118351
Java01
Progression
Posté le 26-12-2011 à 13:19:09  profilanswer
 

j'ai réussi à afficher les points en changeant les classe PointsD2 et DroiteD2
[[PointsD2{x=150.0, y=200.0}], [PointsD2{x=150.0, y=200.0}, PointsD2{x=150.0, y=100.0}]]
 
mais rien ne s'affichent sur la fenêtre.

n°2118701
leonhard
Posté le 29-12-2011 à 15:44:56  profilanswer
 

Java01 a écrit :

j'ai réussi à afficher les points en changeant les classe PointsD2 et DroiteD2
[[PointsD2{x=150.0, y=200.0}], [PointsD2{x=150.0, y=200.0}, PointsD2{x=150.0, y=100.0}]]
 
mais rien ne s'affichent sur la fenêtre.


 
 
Je ne sais pas si l'erreur que je signale est dans le code original, mais dans ta classe DessinPoints tu as une méthode paintcomponent() alors qu'elle devrait s'appeller paintComponent() .
 
Normalement pour détecter un peu plus facilement ce genre d'erreur, on peut utiliser l'annotation @Override .

n°2118716
Java01
Progression
Posté le 29-12-2011 à 16:57:48  profilanswer
 

merci.
Mais cette erreur je l'ai déjà corrigée
le problème reste le même


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Débutante- Une vraie galère avec ce code

 

Sujets relatifs
code phpCode VBA qui plante pour majuscules
Code couleur en VBA (boutons etc)[PERL] Erreure dans code. Algo?
question de débutante:cmt relier base de données avec liste déroulanteBluegriffon - probleme de code
[C#] erreur dans le codecode défaillant
Mise à jour automatique de code / scriptCode A Provenance de train + numero
Plus de sujets relatifs à : Débutante- Une vraie galère avec ce code


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