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

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

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Points : 435
    Points
    435
    Par défaut
    Citation Envoyé par ouafae2011 Voir le message
    C'est bon.
    Mais comment puis-je récupérer ma liste des points pour l'utiliser dans la classe DessinPoints.
    Parce que ma fenêtre est toujours vide
    Tu itère bien sur ta liste de points ?
    fait un System.out.print de tes points un par un et vérifie que ça te renvoie bien des valeurs... du type (int,int)...
    Si tu as les valeurs, tu peux considérer que c'est le draw qui merdoit, sinon c'est la transmission de ta liste...
    I
    Aussi haut que soit le trône on n'est jamais assis que sur son cul...

  2. #22
    Candidat au Club
    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
    Points : 2
    Points
    2
    Par défaut la galère!!!
    Bonjour,

    Merci pour la réponse.
    J'essaye depuis hier. Mais, je n'arrive pas.
    Bon, sachant que je suis encore débutante. Donc, j'ai très peu de ressources.

    J'ai l'impression qu'il y a trop de bordel dans ma classe DessinPoints et que je pourrais la faire autrement mais comment je ne sais pas.

  3. #23
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Points : 2 657
    Points
    2 657
    Par défaut
    Tu peux essayer de trouver des exemples sur internet de classe simple de dessin de point.
    Ne serait-ce que sur les tuto du site:
    http://duj.developpez.com/tutoriels/java/dessin/intro/

  4. #24
    Candidat au Club
    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
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par deathness Voir le message
    Tu peux essayer de trouver des exemples sur internet de classe simple de dessin de point.
    Ne serait-ce que sur les tuto du site:
    http://duj.developpez.com/tutoriels/java/dessin/intro/
    j'ai rajouté ce code en se reposant sur le lien que tu m'as donné.
    Il n'y a pas d'erreur mais la fenêtre est encore vide. Je deviens folle;((
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Iterator iter = pts.ListIterator()
    		while (iter.hasNext()){
    		       pts = iter.next();
    je ne suis pas sure s'il faut mettre la variable pts.

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

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Points : 435
    Points
    435
    Par défaut
    Citation Envoyé par ouafae2011 Voir le message
    J'ai l'impression qu'il y a trop de bordel dans ma classe DessinPoints et que je pourrais la faire autrement mais comment je ne sais pas.
    Pour moi déjà ton but n'est pas forcement clair non plus, alors ça n'aide pas pour t'aider...
    Comme je t'ai dis, est-ce que tu récupère bien les points et que tu les peux les afficher (pas dans un dessin mais avec des coordonnées mathématiques).
    En gros, est-ce que ce que tu lis du fichier est bon.

    Ensuite, comme l'as dis deathness renseigne-toi sur le graphisme en java avec quelques tuto, et essaye un maximum d'avoir une démarche pour savoir ce qui ne marche pas (ce qui implique de savoir ce qui marche).
    Ensuite donne-nous des infos précise, et on pourra t'aider (des stackTraces quand ça plante, des bouts de codes qui te semble pas clair, etc...)

    Citation Envoyé par ouafae2011 Voir le message
    Bon, sachant que je suis encore débutante.
    On est tous passés par là, et on est là pour te donner un coup de main, que demander de plus :p
    I
    Aussi haut que soit le trône on n'est jamais assis que sur son cul...

  6. #26
    Candidat au Club
    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
    Points : 2
    Points
    2
    Par défaut Plus de détails
    Le code demande ceci:
    Chaque ligne d’un fichier texte contient deux ou quatre nombres réels écrits sous forme littérale. Chaque ligne peut être analysée, d’abord en produisant des tokens, puis en faisant le parsing de ceux-ci pour voir s’ils se convertissent en nombres réels. Vous posséderez alors une collection de points affichables dans le plan en spécifiant une échelle. Si quatre valeurs figurent sur une ligne, on construit une droite qu’on dessine jusqu’au bord de la zone de dessin.
    La figure ci-dessous vous montre deux aspects d’un même fichier de points et de droites, avant et après redimensionnement de la fenêtre.

    Et pour la classe DessinPoints:
    itérer à travers l’ArrayList
    prendre un point UnPoint
    dessiner un drawRect() autour de ce point
    fin itération
    ...
    On dessine un rectangle avec drawRect() car un pixel est difficilement visible. On dessinera donc une « enveloppe » du point. Pour les droites, vous utiliserez drawLine(). On aimerait que les droites s’étendent jusqu’au bord de la zone de dessin


    et voilà ce qui s'affiche dans la console:
    0.16121758737316802x + 6.650744081172491

    Sachant que ce que j'ai mis dans mon fichier est :
    1.56 3.87
    1.36 6.87 10.23 8.30

    je vous remercie tous. vos réponses m'ont bq aidées à avancer.

  7. #27
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Points : 2 657
    Points
    2 657
    Par défaut
    Un moyen simple de comprendre, c'est suivre le tuto de developpez, et de bien comprendre tous les morceaux de code qu'ils te donnent. Après tu t'amuses a modifier des trucs dedans pour voir comment ça réagit derrière.

    Mais il faut avoir des notions de comment marche Swing (Thread graphique, raffraichissement, ...)

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

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Points : 435
    Points
    435
    Par défaut
    Citation Envoyé par ouafae2011 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Iterator iter = pts.ListIterator()
    		while (iter.hasNext()){
    		       pts = iter.next();
    je ne suis pas sure s'il faut mettre la variable pts.
    Non, moi non plus
    Faire une Iteration reviens à faire une boucle For, en prenant un élément puis un autre, etc...
    Avec quel IDE tu code ?
    Eclipse (je pense pas), Notepad ??
    Comment fais-tu pour résoudre les conflits ?
    Ce bout de code est improbable...
    Déjà tu as encore oublié un ";" à la fin de la première ligne (mais je met ça sur le compte du copier/coller) ensuite quel est le type de pts, sur lequel tu itère et qu'ensuite tu réaffecte avec une seule valeur de toute sa liste ...

    Execute ça et tu comprendra qu'on ne peut pas itérer sur une liste, prendre un objet de cette liste et réaffecter à TOUTE la liste l'objet qu'on vient de lui prendre...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Iterator iter = pts.ListIterator();
                System.out.println(iter);
    		while (iter.hasNext()){
                        System.out.println(iter.next());
    Par contre je pense que ce que tu veux faire, c'est pour chaque point de cette liste le tracer, non ?
    Ou c'est des lignes, ou autres type de dessins que tu veux faire ??
    I
    Aussi haut que soit le trône on n'est jamais assis que sur son cul...

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

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Points : 435
    Points
    435
    Par défaut
    Ok, je comprend mieux, et j'affine ce que j'ai dis avant, pas contre, ça semble être un exercice de cours ce que tu nous demande, alors je vais essayer de pas tout te pré-mâcher

    Citation Envoyé par ouafae2011 Voir le message
    Et pour la classe DessinPoints:
    itérer à travers l’ArrayList
    prendre un point UnPoint
    dessiner un drawRect() autour de ce point
    fin itération
    Je te fait la traduction en 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
    // Ta frame principale (l'endroit ou tu affiche ton graphic)
    		JFrame frame = new JFrame();
    		//Récupération du Graphics, l'objet dans lequel tu peux dessiner
    		Graphics g = frame.getGraphics();		
    		// width & height du rectangle (valeurs totalement arbitraire...)
    		int width = 5;
    		int height = 5;
    		//Récupération de la liste de points (ici création d'une nouvelle ArrayList vide)
    		List<Point> listeDePoints = new ArrayList<Point>();
    		//Création de l'iterator sur la liste de point
    		Iterator<Point> iter = listeDePoints.iterator();		
    		//Tant que la liste à un suivant (tant quelle renvoie true à la question, est-ce qu'il en reste ?)
    		while (iter.hasNext()) {			
    			//Création d'un point par récupération des valeurs de l'itération..
    			Point unPoint = iter.next();
    			//Affichage et tracé du rectangle dans l'objet graphics avec les valeurs du point de la liste et de la taille et hauteur...
    			g.drawRect(unPoint.x, unPoint.y, width, height);
    Et j'en ai déjà trop fait, mais ce qu'il te manquait étant l'objet Graphics, et donc des connaissances en swing, fait les tuto, ça ne peux que tu servir par la suite !!!!
    I
    Aussi haut que soit le trône on n'est jamais assis que sur son cul...

  10. #30
    Candidat au Club
    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
    Points : 2
    Points
    2
    Par défaut
    En fait le but est de lire le fichier.
    si la ligne contient 2 valeurs , un point est instancié
    4 valeurs , une droite est instanciée sinon afficher une erreur.

    il faut dessiner tous les points et les lignes.( des rectangles autours des points)


    et ma classe DessinPoint la voici:
    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
    74
    75
    76
    77
     
    package dataPoints;
    import geomD2.DroiteD2;
    import geomD2.PointsD2;
     
    import java.awt.*;
    import java.util.ArrayList;
    import java.util.Iterator;
     
    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));
        		}
        	}				
        }
     
     
     
     
     
    	}
    

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

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Points : 435
    Points
    435
    Par défaut
    Ok autant pour moi, j'avais zappé cette classe, je te conseille de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println((int)(ptLu.get(0).getX().intValue()*factEchX),(int)(ptLu.get(0).getY().intValue()*factEchY),enveloppe,enveloppe));
    Avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g.drawRect((int)(ptLu.get(0).getX().intValue()*factEchX),(int)(ptLu.get(0).getY().intValue()*factEchY),enveloppe,enveloppe);
    Pour comprendre pourquoi tu n'affiche rien...

    Plus simplement de mettre un point d'arrêt à la ligne 37 de ta classe et de runner ton Main et mode Debug, ça va t'afficher une autre perspective d'éclipse et ensuite tu as les variables en haut à droite, et tu fait des F5 pour rentrer dans la méthode, ou des F6 pour avancer dans ton code, tu vérifie toutes tes variables pour voir ce qu'elle contiennent...
    I
    Aussi haut que soit le trône on n'est jamais assis que sur son cul...

  12. #32
    Candidat au Club
    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
    Points : 2
    Points
    2
    Par défaut
    L'onglet ou il y a des variables est vide.!!?

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

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Points : 435
    Points
    435
    Par défaut
    Citation Envoyé par ouafae2011 Voir le message
    L'onglet ou il y a des variables est vide.!!?
    C'est étonnant...
    Tu devrais avoir ta classe dans laquelle tu as mis le point d'arrêt au milieu, en haut et gauche tes thread (ne t'en occupe pas pour le moment), et à droite tes variables...

    Les flèches pour avancer dans le code sont celle-ci au dessus en haut :


    Si tu ne les voie pas c'est que tu n'est pas dans le thread qui est en train d'être débugé...
    Tu dois avoir des variables dans la fenêtre de cette manière :


    Sinon tu as vérifié en mettant les System.out dont je t'ai parlé, pour voir quels sont les valeurs de ce que tu veux dessiner ?
    Images attachées Images attachées   
    I
    Aussi haut que soit le trône on n'est jamais assis que sur son cul...

  14. #34
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Utilisez le foreach java !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	List<Point> listeDePoints = new ArrayList<Point>();
                    //Parcours de la liste
    		for(Point unPoint : listeDePoints ) {			
    			//Affichage et tracé du rectangle dans l'objet graphics avec les valeurs du point de la liste et de la taille et hauteur...
    			g.drawRect(unPoint.x, unPoint.y, width, height);
                    }
    Pour ce qui est du problème d'affichage, je conseil de redéfinir la méthode paint.(@overwrite)
    Et au passage de faire cela dans un JPanel spécifique, qui sera ajouter au la frame.
    Une fois le tout proprement liée, réalise un "repaint()" sur la frame.
    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  15. #35
    Candidat au Club
    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
    Points : 2
    Points
    2
    Par défaut
    Merci les amis,
    je vais essayer tout ça et je vous tiendrais au courant ce soir.
    Encore merci

  16. #36
    Membre expérimenté
    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
    Points : 1 745
    Points
    1 745
    Par défaut
    J'ai repris vite fait ton programme.
    Il reste du boulot à faire, indiqué par les TODO.
    Actuellement les points sont dessinés aux endroits indiqués dans le fichier, sans mise à l'échelle. Reste à afficher les droites.
    A toi de finir.

    J'ai séparée la classe qui lit les données de la classe qui les contient.
    Ainsi tu peux changer de méthode de chargement sans modifier la structure de tes données.

    Si tu ne passais pas dans l'affichage c'est à cause de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    paintcomponent(Graphics g) // C Minuscule
    à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    paintComponent(Graphics g) // C Majuscule
    Tu l'aurais vu avec l'annotation @Override




    fr.grapheur.GrapheurApplication
    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
    package fr.grapheur;
    import java.awt.BorderLayout;
     
    import javax.swing.JFrame;
     
    import fr.grapheur.data.Donnees;
    import fr.grapheur.data.reader.FichierPointsReader;
    import fr.grapheur.view.DessinPoints;
     
    public class GrapheurApplication {
    	public static void main(String[] args) {
     
    		try {
    			Donnees donnes = FichierPointsReader.read("C:\\temp\\points.pts");
    			DessinPoints monGraphe = new DessinPoints(donnes,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"); 
    			f.setSize(400, 400);
    			f.setVisible(true);
    		} catch (Exception e) {
    			e.printStackTrace(System.err);
    		}
    	}
    }
    fr.grapheur.view.ZoneDessin
    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    package fr.grapheur.view;
    import fr.grapheur.data.Donnees;
    import fr.grapheur.data.Droite;
    import fr.grapheur.data.Point2D;
     
    import java.awt.Graphics;
    import javax.swing.JPanel;
     
     
     
     
     
    public class ZoneDessin extends JPanel {
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
    	private Donnees donnees;
    	private int bord; // taille des bords
    	private int enveloppe; // dimension des rectangles
     
     
    	public ZoneDessin (Donnees donnees, int largeur, int hauteur, int bord, int enveloppe) {
    		this.donnees = donnees;
    		this.bord = bord;
    		this.enveloppe = enveloppe;
     
    	}
     
    	@Override
    	public void paintComponent(Graphics g) {
    		super.paintComponent(g);
     
    		int panelWidth = getWidth(); // Retourne la taille du panel, quelque soit le redimensionnement
    		int panelHeight = getHeight();
     
        	// Afficher les points
        	for(Point2D point : donnees.getPoints()){
        		System.out.println(point);
        		// Mettre à l'échelle du panel
        		Point2D pointAAfficher = toPanelScale(point, panelWidth, panelHeight, donnees);
     
        		// TODO: Afficher le point
        		g.drawRect((int)pointAAfficher.getX(), (int)pointAAfficher.getY(), (int)enveloppe, enveloppe);
        		g.drawString(point.toString(), (int)pointAAfficher.getX() + enveloppe, (int)pointAAfficher.getY());
        	}	
        	// Afficher les points
        	for(Droite droite : donnees.getDroites()){
        		// Afficher la droite
        		System.out.println(droite);
     
        		// TODO: Calculer p1 et p2 la position Y pour x  = donnes.getXMax() et pour x = donnes.getXMax()
        		// TODO: Si le coefficientDirecteur est important (Droites presques verticales, et y tend vers l'infini) trouver X qui donne y = donnes.getYMin() et Y = donnes.getYMax()
        		Point2D p1 = new Point2D(); 
        		Point2D p2 = new Point2D();
     
        		// Mise à l'echelle
        		p1 = toPanelScale(p1, panelWidth, panelHeight, donnees);
        		p1 = toPanelScale(p2, panelWidth, panelHeight, donnees);
        		// TODO: Afficher le segment p1 -> p2 avec 
        		g.drawLine((int)p1.getX(), (int)p1.getY(), (int)p2.getX(), (int)p2.getY());
     
        	}	
        }
     
     
    	/**
             * Fonction de mise à l'échelle du point.
             * Transorme un point du fichier en une coordonnée dans le JPanel
             * @param point
             * @param panelWidth la largeur du panel
             * @param panelHeight la hauteur du panel
             * @param donnees pour avoir les bornes min et max
             * @return
             */
    	Point2D toPanelScale(Point2D point, int panelWidth, int panelHeight, Donnees donnees) {
    		final Point2D retour = new Point2D(point);
    		// TODO: remplir retour avec les valeurs calculées
     
    		// TODO: Pour que le centre du carré soit la position exacte, penser à enlever enveloppe/2 à X et Y
     
    		// TODO: Penser que l'origine dans un panel (x=0, y=0) SWING se situe en haut à gauche
    		return retour;
    	}
    }
    fr.grapheur.data.Point2D
    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
    package fr.grapheur.data;
     
     
     
    public class Point2D {
    	private double x;
    	private double y;
     
    	// Point D2 a ses constructeurs
    	public Point2D() {
    		this.x = 0.0;
    		this.y = 0.0;
    	};
    	public Point2D(double x, double y) {
    		this.x = x; //conversion implicite de int en Integer
    		this.y = y;
    	}
    	public Point2D(Point2D pt){
    		this.x = pt.x;
    		this.y = pt.y;
    	}
    	public Point2D(double[] pt){
    		this.x = pt[0];
    		this.y = pt[1];
    	}
     
    	public double getX(){
    		return x;
    	}
    	public double getY(){
    		return y;
    	}
    	public void setX(double a){
    		x = a;
    	}
    	public void setY(double a){
    		y = a;
    	}
    	public double dist(Point2D pt){ //distance ÀÜ un point entr?? en paramÔø?tre (pythagore)
    		return Math.sqrt(Math.pow(pt.x-x,2) + Math.pow(pt.y-y,2));
    	}
     
    	// redefinition de la methode Object.equal()
    	@Override
    	public boolean equals(Object p){
    		if (!(p instanceof Point2D)) {
    			return false;
    		} else {
    			return (((Point2D)p).x == x && ((Point2D)p).y == y);  
    		}
    	}
     
    	@Override
    	public String toString() {
    		StringBuilder s = new StringBuilder(getClass().getSimpleName());
    		s.append("{x=");
    		s.append(x);
    		s.append(", y=");
    		s.append(y);
    		s.append("}");
    		return s.toString();
    	}
    }
    fr.grapheur.data.Droite
    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
    package fr.grapheur.data;
     
     
    public class Droite {
    	private double cooefDirecteur;
    	private double b = 0.0; // la droite "pente x + b"
     
    	// Constructeurs
    	// un point et une pente
     
     
     
    	// deux points
    	public Droite(Point2D p1, Point2D p2) {
    		// calcul du cooefDirecteur
    		if (p1.getX() >= p2.getX()) {
    			cooefDirecteur = ((double)p1.getY() - p2.getY())/(p1.getX() - p2.getX());
    		}
    		else {
    			cooefDirecteur = ((double)p2.getY() - p1.getY())/(p2.getX() - p1.getX());
    		}
     
    		// Calcul de B
    		if (p1.getX() >= 0) {
    			b = p1.getY() - cooefDirecteur*p1.getX();
    		}
    		else {
    			b = -(cooefDirecteur*p1.getX()) - p1.getY();
    		}
    	}
     
    	// les accesseurs avec calcul
    	// abscisse d'intersection avec axe X
    	public Double getIntersectionX() {
    		return -(b/cooefDirecteur); 
    	}
    	// ordonnŽe d'intersection avec axe Y
    	public Double getIntersectionY() {
    		return b;
    	}
    	public boolean contient(Point2D p) {
    		return (cooefDirecteur*p.getX() + b == p.getY());
    	}
    	public boolean estParallele(Droite d) {
    		return d.cooefDirecteur == cooefDirecteur;
    	}
     
    	// Les utilitaires
    	public boolean equals(Object o){
    		if (!(o instanceof Droite)) {
    			return false;
    		}
     
    		else return ((((Droite)o).cooefDirecteur == this.cooefDirecteur)
    				&& (((Droite)o).b == this.b)); 
    		//return true;
    				//(((DroiteD2)o).point.getX() == this.point.getX() 
    	}
     
    	@Override
    	public String toString() {
    		StringBuilder s = new StringBuilder(getClass().getSimpleName());
    		s.append("{equation=");
    		s.append(cooefDirecteur);
    		s.append("x + ");
    		s.append(b);
    		s.append("}");
    		return s.toString();
    	}	
    }
    fr.grapheur.data.Donnees
    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
    package fr.grapheur.data;
     
    import java.util.List;
     
     
    public class Donnees {
    	private double xMin;
    	private double xMax;
    	private double yMin;
    	private double yMax;
    	private List<Point2D> points;
    	private List<Droite> droites;
     
     
    	public List<Point2D> getPoints() {
    		return points;
    	}
     
    	public void setPoints(List<Point2D> points) {
    		this.points = points;
    	}
     
    	public List<Droite> getDroites() {
    		return droites;
    	}
     
    	public void setDroites(List<Droite> droites) {
    		this.droites = droites;
    	}
     
    	public double getXMin() {
    		return xMin;
    	}
     
    	public void setXMin(double xMin) {
    		this.xMin = xMin;
    	}
     
    	public double getXMax() {
    		return xMax;
    	}
     
    	public void setXMax(double xMax) {
    		this.xMax = xMax;
    	}
     
    	public double getYMin() {
    		return yMin;
    	}
     
    	public void setYMin(double yMin) {
    		this.yMin = yMin;
    	}
     
    	public double getYMax() {
    		return yMax;
    	}
     
    	public void setYMax(double yMax) {
    		this.yMax = yMax;
    	}
    }
    fr.grapheur.data.reader.FichierPointsReader
    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
    package fr.grapheur.data.reader;
     
    import java.io.FileReader;
    import java.io.LineNumberReader;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.StringTokenizer;
     
    import fr.grapheur.data.Donnees;
    import fr.grapheur.data.Droite;
    import fr.grapheur.data.Point2D;
     
    public class FichierPointsReader {
     
    	public static Donnees read(String fichier) throws Exception {
    		final List<Point2D> points = new ArrayList<Point2D>();
    		final List<Droite> droites = new ArrayList<Droite>();
    		final LineNumberReader lecteurLignes = new LineNumberReader(new FileReader(fichier));
    		String ligneTexte = null;
    		while ((ligneTexte = lecteurLignes.readLine()) != null) {
    			final 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());
    				Point2D Point = new Point2D(X, Y);
    				points.add(Point);
    			}
    			if (st.countTokens() == 4) {
    				Double X = new Double(st.nextToken());
    				Double Y = new Double(st.nextToken());
    				Point2D Point = new Point2D(X, Y);
     
    				Double X1 = new Double(st.nextToken());
    				Double Y1 = new Double(st.nextToken());
    				Point2D Point2 = new Point2D(X1, Y1);
     
    				Droite droite = new Droite(Point, Point2);
    				droites.add(droite);
    			}
    		}
     
    		final Donnees donnees = new Donnees();
    		donnees.setPoints(points);
    		donnees.setDroites(droites);
    		// TODO: Calcul des min max pour la mise à l'echelle plus tard
    		return donnees;
    	}
    }


    Attention aux packages fr.xx.xx, qui ne sont peut-être pas adaptés dans ton cas

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