Forum Clubic

Problème avec un code java

Bonjour à tous,
Mon code a pour but de lire un fichier texte ou sont stockées des valeurs réels, de les stocker dans un arraylist de type Double et de créer des points et des droites.

si la ligne contient 2 valeurs on construit un point, 4 valeurs on construit une droite sinon on affiche un message d’erreur.

Après le but c’est d’afficher ces points en forme de petits rectangles, et d’afficher aussi les droites qui doivent dépasser les 2 points qui les constituent et lier jusqu’à le bord de la fenêtre.

Mon problème c’est que j’ai réussi seulement à afficher la fenêtre mais elle est vide.
Comment je pourrais récupérer ma liste des points dans la classe DessinPoints?
Comment je pourrais améliorer ma classe DessinsPoints parce la méthode que j’ai utilisé ne me plait pas beaucoup. Mais, comme je suis débutante je n’ai pas trouvé mieux.

Merci bq
Voici mon code.
[/code]
package dataPoints;
import geomD2.DroiteD2;
import geomD2.PointsD2;

import java.io.FileReader;
import java.io.LineNumberReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class DataPoints {
/**
*
*/
private static final long serialVersionUID = 1L;
double min_x, min_y, max_x, max_y;
ArrayList vectPoint;
public DataPoints(String fichier){
LineNumberReader lecteurLignes = null;
try{

		lecteurLignes = new LineNumberReader (new FileReader(fichier));
		String ligneTexte = null;
		vectPoint = new ArrayList<PointsD2>();
		while ((ligneTexte = lecteurLignes.readLine()) != null) {
			StringTokenizer st = new StringTokenizer(ligneTexte);

			if (st.countTokens() == 2) {
				//stoker les points dans le vecteur courant
				Double X = new Double(st.nextToken());
				Double Y = new Double(st.nextToken());
				PointsD2 Point = new PointsD2(X,Y);
				vectPoint.add(Point);
			}
			if (st.countTokens() == 4 ) {
				Double X = new Double(st.nextToken());
				Double Y = new Double(st.nextToken());
				PointsD2 Point = new PointsD2(X,Y);
				Double X1 = new Double(st.nextToken());
				Double Y1 = new Double(st.nextToken());

				PointsD2 Point2 = new PointsD2(X1,Y1);
				new DroiteD2(Point,Point2);


			}
		}

		
	}
	catch(Exception e) { e.printStackTrace(); }
	min_max();
}

private void min_max() {
// trouver les coordonnÈes extrÍmes {min_x}, {max_x}, {min_y},
	// {max_y} des points stockÈs dans le vecteur courant: je n'arrive pas 


  }

}



package dataPoints;
import geomD2.DroiteD2;
import geomD2.PointsD2;

import java.awt.*;
import java.util.ArrayList;

import javax.swing.JComponent;
import javax.swing.JPanel;



public class DessinPoints extends JPanel {


	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	DataPoints listPts;
	int bord; // taille des bords
	int enveloppe; // dimension des rectangles
	
	
	public DessinPoints (DataPoints pts, int largeur, int hauteur, int bord, int enveloppe) {
		this.listPts = pts;
		this.bord = bord;
		this.enveloppe = enveloppe;

	}
	public void paintcomponent (Graphics g) {
		super.paintComponent(g);
		g.setXORMode(Color.RED);
	  	Dimension tailleSuivante = new Dimension (this.getSize()); //Affectation de la nouvelle taille de la fen?™tre
    	JComponent tailleOriginal = null;
		@SuppressWarnings("null")
		double factEchX = tailleSuivante.getWidth()/tailleOriginal.getWidth(); //calcule du facteur de l'?©chelle sur l'axe X
    	double factEchY = tailleSuivante.getHeight()/tailleOriginal.getHeight(); //calcule de facteur de l'?©chelle sur l'axe Y
	
    	for (int i=0;i<listPts.size();i++){
    		ArrayList<PointsD2> ptLu = (ArrayList<PointsD2>)listPts.get(i); //Liste des point courants
    		//Test si il y a 1 ou 2 point pour l'affichage de ses dernier avec ou sans la droite
    		if(ptLu.size()==1){
    			//Affichage des points
    			g.drawRect((int)(ptLu.get(0).getX().intValue()*factEchX),(int)(ptLu.get(0).getY().intValue()*factEchY),enveloppe,enveloppe);
    		}
    		if(ptLu.size()==2){
    			int milieuPointX1,milieuPointY1,milieuPointX2,milieuPointY2; //Coordin?©es central des points pour l'affichage central de la droite

    			//definition du milieu des points
    			milieuPointX1 = ptLu.get(0).getX().intValue()-enveloppe/2;
    			milieuPointY1 = ptLu.get(0).getY().intValue()-enveloppe/2;
    			milieuPointX2 = ptLu.get(1).getX().intValue()-enveloppe/2;
    			milieuPointY2 = ptLu.get(1).getY().intValue()-enveloppe/2;

    			//Affichage des points
    			g.drawRect((int)(milieuPointX1*factEchX),(int)(milieuPointY1*factEchY),enveloppe,enveloppe);
    			g.drawRect((int)(milieuPointX2*factEchX),(int)(milieuPointY2*factEchY),enveloppe,enveloppe);
			
    			//Cr?©ation de la droite
    			DroiteD2 droite = new DroiteD2 (ptLu.get(0),ptLu.get(1));
    			//Affichage de la droite
    			g.drawLine((int)(droite.getIntersectionX().intValue()*factEchX),0,0,(int)(droite.getIntersectionY().intValue()*factEchY));
    		}
    	}				
    }



	
		
	}


import java.awt.BorderLayout;

import javax.swing.JFrame;

import dataPoints.DataPoints;
import dataPoints.DessinPoints;

public class Grapheur {
public static void main(String[] args) {
DataPoints listePts = new DataPoints (“fichier.txt”);
//System.out.println(listePts);
DessinPoints monGraphe = new DessinPoints(listePts,600,400,10,10);
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(new BorderLayout());
f.add(monGraphe, BorderLayout.CENTER);
f.setTitle(“Grapheur”);

	int bordure = 0;
	f.setSize(400, 400);
	f.setVisible(true);
	

}

}

Personne???’

Pas trop le temps de voir ça en soirée. Tu peux poster ton code sur pastebin.com… avec la coloration syntaxique ?

Merci.

je l’ai posté.
merci beaucoup.
Sachant que je suis encore débutante et j’ai passé une semaine à voir c’est quoi le problème, j’ai rien trouvé

il y a la fonction min_max que je ne l’ai pas fait.

Heu, si tu ne renvoie pas le lien pastebin (copie colle l’url après avoir valider), je n’aurai rien… logique :slight_smile:

Désolée:))

pastebin.com…

il faut commencer par rajouter à ta fenêtre la classe “monGraphe”.

Mais je n’ai pas de classe monGraphe??
J’ai 3 classe DessinPoints, DataPoints et Grapheur

on chipote :smiley: :ane:
il s’agit de l’instance de ta classe DessinPoints nommé monGraphe.

f.getContentPane().add(mongraphe);

ça me marque ces erreurs:

Infinityx + -Infinity
dataPoints.DataPoints@272d7a10
Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
at dataPoints.DessinPoints.paintComponent(DessinPoints.java:45)
at javax.swing.JComponent.paint(JComponent.java:1029)
at javax.swing.JComponent.paintChildren(JComponent.java:862)
at javax.swing.JComponent.paint(JComponent.java:1038)
at javax.swing.JComponent.paintChildren(JComponent.java:862)
at javax.swing.JComponent.paint(JComponent.java:1038)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:567)
at javax.swing.JComponent.paintChildren(JComponent.java:862)
at javax.swing.JComponent.paint(JComponent.java:1038)
at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:34)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:60)
at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:97)
at java.awt.Container.paint(Container.java:1793)
at java.awt.Window.paint(Window.java:3375)
at sun.awt.RepaintArea.paintComponent(RepaintArea.java:276)
at sun.awt.RepaintArea.paint(RepaintArea.java:241)
at apple.awt.ComponentModel.handleEvent(ComponentModel.java:263)
at apple.awt.CWindow.handleEvent(CWindow.java:532)
at java.awt.Component.dispatchEventImpl(Component.java:4811)
at java.awt.Container.dispatchEventImpl(Container.java:2143)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4565)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:679)
at java.awt.EventQueue.access$000(EventQueue.java:85)
at java.awt.EventQueue$1.run(EventQueue.java:638)
at java.awt.EventQueue$1.run(EventQueue.java:636)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$2.run(EventQueue.java:652)
at java.awt.EventQueue$2.run(EventQueue.java:650)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:649)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Et la ligne ou il y a l’erreur est cela-là:
for (int i=0;i<listPts.size();i++){

Alors, là je ne comprends rien. Pourquoi Ca me met x et y à l’infini??
Je deviens folle…

Voilà j’ai changé les classe DataPoints et DessinsPoints . ça ne met pas d’erreur mais ça n’affiche rien à part des valeurs bizarres.




package dataPoints;

import geomD2.PointsD2;

import java.io.FileReader;
import java.io.LineNumberReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class DataPoints extends ArrayList<ArrayList<PointsD2>> {
	
	private static final long serialVersionUID = 1L;
	
    double min_x=0, min_y=0, max_x=0, max_y=0; //coordinn?©es maxi et mini
    //Lecture 
    public DataPoints(String fichier) {
	LineNumberReader lecteurLignes = null;		
	try {
	    lecteurLignes = new LineNumberReader(new FileReader(fichier)); //Lecture de la linge courante
	    String ligneTexte = null;
	    
	    while ((ligneTexte = lecteurLignes.readLine()) != null) {
	    	ArrayList<PointsD2> listePoints = new ArrayList<PointsD2>(); //Cr?©ation de la liste de points
	    	StringTokenizer st = new StringTokenizer(ligneTexte);
	    	//Test si il y a deux ou quatre coordonn?©es pour cr?©?© un ou deux point(s) 
	    	if (st.countTokens() == 2) {
	    		double x=0,y=0; //coordonn?©es du futur point
				PointsD2 pt = null; //Futur Point vide 
				//lecture de la ligne et stockage des coordon?©es
				while(st.hasMoreTokens()){
					x = Double.parseDouble(st.nextToken()); //lis le premier token et l'affecte ?? x
					y = Double.parseDouble(st.nextToken()); //lis le deuxi?®me token et l'affecte ?? y
				}
				pt = new PointsD2(x, y); //Cr?©ation du point
				listePoints.add(pt); //ajout du point dans la liste
				min_max(pt); //M??j des extremums par rapport au point
	    	}
	    	if (st.countTokens() == 4) { 
	    		double x1=0, x2=0, y1=0, y2=0; //coordonn?©es des futurs points
	    		PointsD2 pt1 = null; //Futur premier point vide
	    		PointsD2 pt2 = null; //Futur deuxi?®me point vide
	    		//lecture de la ligne et stockage des coordon?©es
	    		while(st.hasMoreTokens()){
	    			x1 = Double.parseDouble(st.nextToken()); //lis le premier token et l'affecte ?? x1
	    			y1 = Double.parseDouble(st.nextToken()); //lis le deuxi?®me token et l'affecte ?? y1
	    			x2 = Double.parseDouble(st.nextToken()); //lis le troixi?®me token et l'affecte ?? x2
	    			y2 = Double.parseDouble(st.nextToken()); //lis le deuxi?®me token et l'affecte ?? y2
	    		}
	    		pt1 = new PointsD2(x1, y1); //Cr?©ation du premier point
	    		pt2 = new PointsD2(x2, y2); //Cr?©ation du deuxi?®me point
	    		listePoints.add(pt1); //ajout du premier point dans la liste
	    		listePoints.add(pt2); //ajout du deuxi?®me point dans la liste
	    		min_max(pt1); //M??j des extremums par rapport au premier point
	    		min_max(pt2); //M??j des extremums par rapport au deuxi?®me point
	    	}
	    //Ajout de la liste de point ?? la liste
	    this.add(listePoints);
	    }
	}
	catch(Exception e) { e.printStackTrace(); }
    }
    
    private void min_max(PointsD2 ptExtremum) {
    	// trouver les coordonn?©es extr?™mes {min_x}, {max_x}, {min_y},
    	// {max_y} des points stock?©s dans le vecteur courant
	    if (ptExtremum.getX()<min_x) min_x=ptExtremum.getX(); //M??j de min_x si existe
	    if (ptExtremum.getX()>max_x) max_x=ptExtremum.getX(); //M??j de max_x si existe
	    if (ptExtremum.getY()<min_y) min_y=ptExtremum.getY(); //M??j de min_y si existe
    	if (ptExtremum.getY()>max_y) max_y=ptExtremum.getY(); //M??j de max_y si existe
    }	
    public int getMaxX(){
    	//retourne la valeur de max_x
    	return (int)max_x;
    }
    public int getMaxY(){
    	//retourne la valeur de max_y
    	return (int)max_y;
    }
}


package dataPoints;

import geomD2.DroiteD2;
import geomD2.PointsD2;

import java.awt.*;
import java.util.ArrayList;
 
import javax.swing.JComponent;
import javax.swing.JPanel;
 
 
 
public class DessinPoints extends JPanel {
 
 
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	DataPoints listPts;
	int bord; // taille des bords
	int enveloppe; // dimension des rectangles
 
 
	public DessinPoints (DataPoints pts, int largeur, int hauteur, int bord, int enveloppe) {
		this.listPts = pts;
		this.bord = bord;
		this.enveloppe = enveloppe;
 
	}
	public void paintcomponent (Graphics g) {
		super.paintComponent(g);
		g.setXORMode(Color.RED);
	  	Dimension tailleSuivante = new Dimension (this.getSize()); //Affectation de la nouvelle taille de la fenêtre
    	JComponent tailleOriginal = null;
		@SuppressWarnings("null")
		double factEchX = tailleSuivante.getWidth()/tailleOriginal.getWidth(); //calcule du facteur de l'échelle sur l'axe X
    	double factEchY = tailleSuivante.getHeight()/tailleOriginal.getHeight(); //calcule de facteur de l'échelle sur l'axe Y
 
    	for (int i=0;i<listPts.size();i++){
    		ArrayList<PointsD2> ptLu = (ArrayList<PointsD2>)listPts.get(i); //Liste des point courants
    		//Test si il a 1 ou 2 point pour l'affichage de ses dernier avec ou sans la droite
    		if(ptLu.size()==1){
    			//Affichage des points
    			g.drawRect((int)(ptLu.get(0).getX().intValue()*factEchX),(int)(ptLu.get(0).getY().intValue()*factEchY),enveloppe,enveloppe);
    		}
    		if(ptLu.size()==2){
    			int milieuPointX1,milieuPointY1,milieuPointX2,milieuPointY2; //Coordinées central des points pour l'affichage central de la droite
 
    			//definition du milieu des points
    			milieuPointX1 = ptLu.get(0).getX().intValue()-enveloppe/2;
    			milieuPointY1 = ptLu.get(0).getY().intValue()-enveloppe/2;
    			milieuPointX2 = ptLu.get(1).getX().intValue()-enveloppe/2;
    			milieuPointY2 = ptLu.get(1).getY().intValue()-enveloppe/2;
 
    			//Affichage des points
    			g.drawRect((int)(milieuPointX1*factEchX),(int)(milieuPointY1*factEchY),enveloppe,enveloppe);
    			g.drawRect((int)(milieuPointX2*factEchX),(int)(milieuPointY2*factEchY),enveloppe,enveloppe);
 
    			//Création de la droite
    			DroiteD2 droite = new DroiteD2 (ptLu.get(0),ptLu.get(1));
    			//Affichage de la droite
    			g.drawLine((int)(droite.getIntersectionX().intValue()*factEchX),0,0,(int)(droite.getIntersectionY().intValue()*factEchY));
    		}
    	}				
    }
 
 
 
 
 
	}

et les valeurs:

[[geomD2.PointsD2@272d7a10], [geomD2.PointsD2@1aa8c488, geomD2.PointsD2@3dfeca64]]