IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques en Java Discussion :

Problème avec ArrayList


Sujet :

Interfaces Graphiques en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 21
    Par défaut Problème avec ArrayList
    Bonjour à tous,
    Je suis entrain de réaliser un programme en java. Le but de ce programme est de lire un fichier .txt ou chaque ligne contient des nombres réels. après on affiche ces points dans une fenêtre.
    Si la ligne contient 4 nombres, on construit une droite qu'on dessine jusqu'au bord de la zone de dessin.

    J'ai procéder comme cela:
    D'abords, dans la classe DataPoints, je lis le ficher ligne par ligne. Si le fichier contient 2 valeurs, j'instancie un point, 4 valeurs j'instancie une droite sinon je mets en exception.
    Chacun des points instanciés est ajouté au vecteur ArrayList.

    Dans la Classe DessinPoints: lire les points et dessine un rectangle autours de ce point avec drawrect(). et puis dessiner les droites qui doivent s'étendre jusqu'au bord de la zone de dessin.
    Après, on doit pouvoir redimentionner la fenêtre.

    Le problème c'est que j'ai des erreurs qui se produisent après compilation.
    Aidez-moi svp. Cela fait une semaine que je me prends la tête.
    Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
     
    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 extends ArrayList<ArrayList<PointsD2>>{
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
    	double min_x, min_y, max_x, max_y;
    	ArrayList <PointsD2> 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);
     
     
    				}
    			}
    			System.out.println(vectPoint);
    		}
    		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 
     
     
    	  }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
     
    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.add(monGraphe, "center");
    		f.setTitle("Grapheur"); 
    		f.setSize(400, 400);
    	    f.setVisible(true);
    	}
     
    }
    Et les erreurs:
    java.lang.NumberFormatException: For input string: "import"[]

    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1222)
    at java.lang.Double.valueOf(Double.java:475)
    at java.lang.Double.<init>(Double.java:567)
    at dataPoints.DataPoints.<init>(DataPoints.java:30)
    at Grapheur.main(Grapheur.java:9)
    Exception in thread "main" java.lang.IllegalArgumentException: cannot add to layout: unknown constraint: center
    at java.awt.BorderLayout.addLayoutComponent(BorderLayout.java:446)
    at java.awt.BorderLayout.addLayoutComponent(BorderLayout.java:407)
    at javax.swing.JRootPane$1.addLayoutComponent(JRootPane.java:514)
    at java.awt.Container.addImpl(Container.java:1074)
    at java.awt.Container.add(Container.java:959)
    at javax.swing.JFrame.addImpl(JFrame.java:540)
    at java.awt.Container.add(Container.java:927)
    at Grapheur.main(Grapheur.java:14)


    Merci Beaucoup.

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    Affiche le contenu du fichier que tu lis.
    Visiblement c'est pas des nombres :

    java.lang.NumberFormatException: For input string: "import"

    Cette erreur t'explique que tu essayes de transformer la chaîne de caractère "import" en nombre.

  3. #3
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 21
    Par défaut
    Citation Envoyé par Mathieu.J Voir le message
    Affiche le contenu du fichier que tu lis.
    Visiblement c'est pas des nombres :




    Cette erreur t'explique que tu essayes de transformer la chaîne de caractère "import" en nombre.
    Merci Mathieu pour ta réponse:
    Oui le contenu de mon fichier est de type String mais normalement, je l'ai casté en Double dans la classe DataPoints.
    Comment je devrais faire. Sachant que je suis encore débutante.
    Merci encore une fois.

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    Ce que je voulais dire, c'est que ton fichier ne doit pas contenir que des nombres !
    D'où l'intérêt de voir le contenu pour t'aider à le lire correctement.

  5. #5
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 21
    Par défaut le fichier
    Merci pour la consigne.
    j'ai résolu cette erreur. Néanmoins, il reste ces erreurs:
    est ce que tu peu jeter un coup d'oeil sur mon programme pour me dire ce que t'en penses.
    Merciiiii!

    les erreurs:

    Exception in thread "main" java.lang.IllegalArgumentException: cannot add to layout: unknown constraint: center
    at java.awt.BorderLayout.addLayoutComponent(BorderLayout.java:446)
    at java.awt.BorderLayout.addLayoutComponent(BorderLayout.java:407)
    at javax.swing.JRootPane$1.addLayoutComponent(JRootPane.java:514)
    at java.awt.Container.addImpl(Container.java:1074)
    at java.awt.Container.add(Container.java:959)
    at javax.swing.JFrame.addImpl(JFrame.java:540)
    at java.awt.Container.add(Container.java:927)
    at Grapheur.main(Grapheur.java:14)

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Par défaut
    Vire ta contrainte "center" qui n'existe pas, tu n'auras plus cette erreur.

    Si tu veux utiliser une contrainte utilise les variables statiques de la classe
    BorderLayout. (BorderLayout.SOUTH, BorderLayout.CENTER(par défaut), ect ...)

    Ah oui sinon pourquoi ta classe DatasPoints hérite de Arraylist ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class DataPoints extends ArrayList<ArrayList<PointsD2>>
    Alors que tu n'utilises pas les méthodes héritées ?

  7. #7
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    DataPoints
    - Extends à supprimer
    - Tu mets bien les PointsD2 dans vectPoint lorsque tu as 2 coordonnées;
    - Tu ne mets pas les PointsD2 dans vectPoint lorsque tu as 4 coordonnées
    - Il te faut un getter pour récupérer vectPoint : getVectPoint()

    DessinPoint
    - Utiliser le getter getVectPoint() pour récupérer la liste de tes points à afficher.
    - Boucler sur cette liste et faire l'affichage comme tu l'as fait.
    - Ta boucle for (int i=0;i<listPts.size();i++){ ne fonctionnera jamais, car tu mets tes points dans vectPoint, donc listPts.size() sera toujours égal à 0.

  8. #8
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 21
    Par défaut get
    Citation Envoyé par Mathieu.J Voir le message
    DataPoints

    - Il te faut un getter pour récupérer vectPoint : getVectPoint()

    DessinPoint
    - Utiliser le getter getVectPoint() pour récupérer la liste de tes points à afficher.
    - Boucler sur cette liste et faire l'affichage comme tu l'as fait.
    - Ta boucle for (int i=0;i<listPts.size();i++){ ne fonctionnera jamais, car tu mets tes points dans vectPoint, donc listPts.size() sera toujours égal à 0.
    comment utiliser un get avec une liste?

  9. #9
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    Ton getXXX() retourne la liste.

  10. #10
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 21
    Par défaut le getter
    Salut Mathieu,
    Je m'excuse encore une fois.

    j'ai utilisé comme tu m'as dit le get
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    getvetctPoint() {
    				return vectPoint
    			}
    et cela me met cette erreur:

    Exception in thread "main" java.lang.Error: Unresolved compilation problems:
    The method getvetctPoint() is undefined for the type DataPoints
    Syntax error, insert ";" to complete Statement
    Void methods cannot return a value
    Syntax error, insert ";" to complete BlockStatements

    at dataPoints.DataPoints.<init>(DataPoints.java:48)
    at Grapheur.main(Grapheur.java:11)

    Je sais que c'est un problème de syntaxe, mais je n'arrive pas à le résoudre malgré que j'aie consulté le tutoriels!

  11. #11
    Membre chevronné Avatar de Drakiss
    Homme Profil pro
    Consultant MOE
    Inscrit en
    Octobre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Par défaut
    Citation Envoyé par ouafae2011 Voir le message
    Exception in thread "main" java.lang.Error: Unresolved compilation problems:
    The method getvetctPoint() is undefined for the type DataPoints
    Syntax error, insert ";" to complete Statement
    Void methods cannot return a value
    Syntax error, insert ";" to complete BlockStatements
    at dataPoints.DataPoints.<init>(DataPoints.java:48)
    at Grapheur.main(Grapheur.java:11)
    Il faudrait commencer à essayer de lire et comprendre les stacktraces...

    Je traduit :
    Syntax error, insert ";" à la fin de la ligne 48 de DataPoints.java qui est appelé par Grapheur.java...

    Citation Envoyé par ouafae2011 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    getvetctPoint() {
    				return vectPoint ;
    			}
    En général quand tu clique sur ta stacktrace, ça te renvoi à la ligne qui a plantée, sinon tu poste rapidement un bout de la stack dans google, tu as une réponse, et si vraiment tu ne voit pas, il te reste le mode débug pour essayer de comprendre ce qu'il ne va pas...

    Bonne continuation.

Discussions similaires

  1. Problème avec ArrayList
    Par yarf dans le forum Collection et Stream
    Réponses: 12
    Dernier message: 03/07/2007, 10h50
  2. problème avec ArrayList et JVM
    Par ulysse031 dans le forum Collection et Stream
    Réponses: 29
    Dernier message: 26/04/2007, 20h47
  3. problème avec arraylist
    Par ulysse031 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 27/02/2007, 12h00
  4. [débutant] problème avec arraylist
    Par sissi25 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 17/12/2006, 16h01
  5. Problème avec ArrayList <String>
    Par fiphi dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 29/08/2006, 09h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo