Java01 Progression | 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 :
- 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;
- }
- }
|
Code :
- 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));
- }
- }
- }
- }
|
Code :
- 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.getContentPane().add(monGraphe);
- f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- f.setLayout(new BorderLayout());
- f.add(monGraphe, BorderLayout.CENTER);
- f.setTitle("Grapheur" );
- @SuppressWarnings("unused" )
- int bordure = 0;
- f.setSize(400, 400);
- f.setVisible(true);
- }
- }
|
|