réalisation d un maroc routier en java??

hervemoha
réalisation d un maroc routier en java??

J aimerai que vs puissiez m aider pour terminer mon projet sur la réalisation d'un atlas routier. J ai rencontre quelques problemes sur mon code java.
J aimerai que vous puissiez m aider. Je pourrai poster tout le code et des explications si quelqu un souhaite bien m aider
Merci à ts
bye

fredericmazue

Si tu poses une question bien précise, avec un petit peu de code pour qu'on comprenne bien tu trouveras probablement de l'aide ici :)

hervemoha

ok,je vais bien preeciser mon probleme et poster mon code aussi
merci

hervemoha
code

voici l énnoncé de mon projet:

Projet de Java: Conception d'un atlas routier
Vous allez dans ce projet écrire une application permettant de calculer et de visualiser sur une carte un itinéraire entre deux villes de France, calculer des itinéraire optimum en temps ou en consommation d'essence, etc...

Les fichiers nécéssaire à ce projet sont les suivants: FileTableau.class, ville.txt, route.txt

Etape 1: Chargement des données
Les données nécéssaires à votre application sont stockées dans des fichiers. Dans un premier temps, nous allons nous intérésser au fichier "ville.dat", qui contient les informations concernant les villes elle-mêmes. Le fichier contient une ligne pour chaque ville enregistrée.

Chaque ligne est construite ainsi: il y a quatre champs, le premier est le nom de la ville, le second son code, le troisième et le quatrième ses coordonnées. Les coordonnées sont fournies en km, et se situent donc entre 0 et 1000. Les champs sont séparés par des ";". Voici un extrait de ce fichier:

Lille;7;617;50
Nice;50;958;797
...
Vous pouvez éditer directement ce fichier dans DrJava ou WordPad pour voir son contenu.

Pour modéliser l'ensemble de nos villes, vous allez écrire deux classes:

La classe Ville, qui contient les données relatives à une ville (nom, code, coordonnées)
La classe Monde, qui contient l'ensemble de toutes les villes. La classe Monde doit posséder un tableau de villes et une méthode:
public void charger(String fichier)
dont le rôle est de remplir le tableau avec les données contenues dans le fichier passé en paramètre (qui sera "ville.dat" dans notre cas).

Pour écrire la méthode "charger", vous avez besoin des outils suivants:

La classe TextFile, qui vous permet de charger un fichier dans un tableau de Strings. Le fichier se charge en créant un objet TextFile ainsi:
TextFile tf = new TextFile("ville.dat");
tf contient alors l'ensemble des lignes du fichier "ville.dat". Cet ensemble peut être interrogé par deux méthodes de la classe TextFile: void getSize() qui renvoie le nombre de ligne, et String getLine(int i) qui renvoie la String correspondant à la ième ligne (à partir de 0).
La classe StringTokenizer, qui va vous permettre d'extraire chacun des champs de la ligne. Vous consulterez la documentation en ligne de Java pour apprendre à vous en servir.
La fonction Integer.parseInt(String s) qui vous permettra de convertir les Strings obtenues en entiers, si besoin est.

Une fois la classe Monde terminée, vous la testerez en créant un programme de test qui créé un objet Monde, charge le fichier "ville.dat", et affiche pour chacune des villes son nom, son code, ses cooronnées.

Etape 2: Affichage de la carte
Premières expérimentations
Dans un premier temps, vous allez créer une classe TestDessin héritant de pour expérimenter le dessin dans les fenètre en Java.

Jusque là, vous avez appris à ajouter des composants graphiques dans une fenètre. Ici, il faut directement dessiner dedans. Les dessins se font au sein d'une méthode spéciale appelé automatiquement par Java au moment de l'affichage. Vous devez écrire cette méthode ainsi:

public void paint(Graphics g) {
super.paint(g);
...
}
Vous devez remplacer les trois points par vos instructions d'affichage, qui seront des méthodes de l'objet graphique g. Par exemple, pour dessiner un rectangle de 10 sur 10 aux coordonnées (100,50), on utilisera la méthode:

g.fillRect(100,50,10,10)

Vous devez également ajouter à votre programme la méthode suivante, pour lui premettre de mettre à jour correctement votre dessin en cas de déplacement ou de redimensionnement de la fenêtre:
public void update(Graphics g) {
super.update(g);
paint(g);
}
Expérimentez différentes méthodes d'affichage (rectangle, ligne...) ainsi que l'affichage de chaines de caractères. Consultez la documentation de la class Graphics pour avoir plus d'informations sur les instructions d'affichage.

La classe Carte
Vous allez écrire une classe Carte héritant de JFrame qui sera chargée de l'affichage de la carte. Comme dans la classe de test précédente, l'affichage se fera au sein de la méthode paint.

Bien sûr, vous allez avoir besoin des données sur les villes pour afficher la carte. Celles-ci vous seront fournies sous forme d'un objet de type Monde qui sera passé au constructeur de Carte et stockés sous forme d'attribut de la classe Carte.

Dans un premier temps, l'affichage de la carte ne consiste qu'en l'affichage de chacune des villes. Un point (ou un rectangle ou un cercle) aux coordonnées de chaque ville, et son nom affiché à coté. Pour rendre la carte plus lisible, vous pouvez utiliser une police de caractère plus réduite, ainsi que des couleurs.

Ecrivez la classe Carte et testez-la. Si votre programme est correct, l'ensemble des villes doit se disposer pour former la silhouette de la France.

Etape n°3: Un premier Atlas
Vous allez maintenant transformer votre carte en une application capable d'indiquer une ville selectionnée par l'utilisateur.

L'application que vous allez créer sera une fenêtre divisée en deux parties. Dans la partie gauche, il y aura la carte, et dans la partie droite, il y aura l'interface utilisateur, comportant un titre, une zone de saisie et un bouton. Quand l'utilisateur rentrera le nom d'une ville et cliquera sur le bouton, alors celle-ci devra s'afficher en rouge.

L'interface graphique
Modifiez la classe Carte pour que celle-ci puisse s'insérer dans votre application. Pour cela, elle ne doit plus hériter de JFrame, mais de JPanel.

Votre carte n'est maintenant plus directement affichable, car ce n'est plus une fenêtre, mais un composant graphique. Vous devez donc supprimer l'instruction show(). Pour spécifier la taille du composant, remplacez setBounds(X,Y) par setPreferredSize(new Dimension(X,Y)). Votre composant graphique Carte est maintenant prêt.

Créez maintenant une classe Atlas héritant de JFrame, qui sera votre application principale. Dans le constructeur de votre application, créez un Container et insérez-y un label pour le titre, une zone de saisie et un bouton. Ce Container sera votre interface. Utilisez le layout suivant pour votre container:

BoxLayout interfaceLayout = new BoxLayout(c,BoxLayout.Y_AXIS)

Pour que la zone de saisie ne soit pas trop grande, vous pouvez lui donner une taille maximum avec la méthode setMaximumSize(Dimension d). Ajoutez dans le Content Pane de votre application la carte et l'interface.

Testez votre application. Vous devez voir apparaitre la carte sur la gauche et l'interface sur la droite.

Un premier traitement
Ecrivez dans la classe Monde une méthode:

Ville getVilleParNom(String nomVille)
qui renvoie la ville dont le nom est passé en paramètre.

Ajoutez dans la classe Carte un attribut villeSelectionnee qui contient le code de la ville selectionnée, et une méthode

setVilleSelectionnee(Ville v)
qui permet de changer cet attribut.

Modifiez la méthode paint de la classe Carte pour que la ville selectionnée s'affiche en couleur.

Enfin, modifiez la classe Atlas pour que lorsque l'utilisateur clique sur le bouton "Rechercher", la ville qu'il a entré dans la zone de saisie s'affiche en couleur. Référez-vous à la correction du TP n°7 si besoin est.

Etape n°4: Les routes
Chargement
Le fichier "route.dat" contient les informations concernant les routes entre les villes. Chaque ligne contient trois nombres. Le premier est le code de la ville de départ, le second le code de la ville d'arrivée et le troisième la distance.

Pour chaque ville, vous allez ajouter les informations concernant ses voisines. Pour cela, vous allez ajouter dans la classe Ville trois attributs:

un attribut int nbVoisines, contenant le nombre de voisines
un tableau Ville [] voisines, contenant les villes voisines. Il n'y a jamais plus de 10 voisines, donc vous pouvez déclarer à l'avance un tableau de cette taille.
un tableau int [] distanceVoisines, contenant les distances correspondantes.

Vous allez également ajouter une méthode

public void ajouterVoisine(Ville v,int distance)
permettant d'ajouter une nouvelle voisine.

Dans la classe Monde, vous allez écrire une méthode

public Ville getVilleParCode(int code)
qui renvoie la ville dont le code est passé en paramètre.

Enfin, vous allez ajouter le chargement des routes à la suite du chargement des villes dans la classe Monde. Attention, pour chaque route entre deux villes X et Y, Y doit être ajouté aux voisines de X, et X aux voisines de Y.

Affichage
Modifiez la méthode paint de la classe Carte pour que les routes soit affichées.

Etape n°5: Les itinéraires
Le principe de l'algorithme
Le calcul du plus cours chemin entre deux villes n'est pas un problème très simple à resoudre. Vous allez ici utiliser un algorithme simplifié, qui ne donne pas toujours le meilleur résultat, mais généralement une bonne approximation.

Pour aller d'une ville A vers une ville B, vous allez adopter la demarche suivante:

On se place en A.
On se deplace vers la ville voisine la plus proche de B.
On recommence l'étape précédente jusqu'à se situer en B.

Cet algorithme fonctionne dans la grande majorité des cas, mais pas toujours, comme vous le verrez par la suite.

Mise en oeuvre
Distances
La première chose à faire est d'écrire une méthode de calcul de distance entre deux villes. Attention! Le fichier "route.dat" vous fournit les longueurs des routes entre villes voisines. Dans l'algorithme précédent, vous avez besoin de connaître la distance réélle entre deux villes quelconques. Vous allez pour cela faire un simple calcul de distance grâce aux coordonnées géométriques des villes.

Ajoutez à la classe Ville une méthode public int distance(Ville v) qui renvoie la distance à la ville passée en paramètre.

Aide: pour calculer la racine carrée d'un entier x, vous devez utiliser la méthode suivante: (int)(Math.sqrt(x))

Itineraire
Vous allez maintenant écrire une classe Itineraire, qui caractérise un itinéraire entre deux villes.

La classe contient un tableau de villes, qui sont les villes présentes sur l'itinéraire, ainsi que le nombre de ville. Le tableau sera remplit pendant le calcul de l'itinéraire.

La classe, en plus des accesseurs getVille et getNbVille, possède une méthode:

public boolean contains(Ville v)
qui renvoie true si v est sur l'itinéraire, et false sinon.

Enfin, et surtout, elle possède un constructeur

public Itineraire(Ville depart,Ville arrivee)
qui construit l'itinéraire entre les villes depart et arrivee grâce à l'algorithme décrit précédemment.

Affichage
De même que pour villeSelectionnee, vous allez ajouter un attribut itineraireSelectionne et une méthode

public void setItineraireSelectionne(Itineraire i)
à votre classe Carte.

Vous allez modifier la méthode paint de manière à ce que les villes et les routes sur l'itinéraire apparaissent en couleur.

Enfin, vous allez ajouter à votre atlas deux champ de saisie, l'un pour le départ, l'autre pour l'arrivée, et un bouton pour le calcul de l'itinéraire .

Ecrivez une classe Itinéraire qui décrit un itinéraire entre deux villes, sous forme d'une succession de villes.

Le constructeur Itinéraire

Ajoutez un attribut itineraireSelectionne dans la classe Carte et modifiez la méthode paint de manière à ce que l'itinéraire selectionné s'affiche en rouge.

Rectification
Testez votre programme, par exemple de Bordeaux à Lille. Tout doit fonctionner correctement. Testez-le ensuite du Havre à Caen. Que se passe-t-il? Pourquoi? Comment rectifier cela?

Mon probleme se situe au niveau de l'étape 5 c a d à partir de l itineraire. Je n 'arrivepas à creer la classe Itineraire ni meme la methode pour la construction du plus court chemin.
Actuellement sur mon code, j aiprobleme d'affichage aussi. Quand je selectionne une ville sur le JCombobox, un messaged'erreur s'affiche. J aimerai que quand je selectionne ne ville, celle ci s'affiche en rougeet les autres non.Je poste mon code

//la classe FileTableau

import java.io.*;
import java.util.ArrayList;
import java.util.List;

class FileTableau
{

    private int size;
    private String lines[];

    public FileTableau(String s)
    {
        try
        {
            FileInputStream fileinputstream = new FileInputStream(s);
            BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(fileinputstream));
            ArrayList arraylist = new ArrayList();
            String s1;
            while((s1 = bufferedreader.readLine()) != null) 
            {
                arraylist.add(s1);
            }
            size = arraylist.size();
            lines = (String[])arraylist.toArray(new String[0]);
            bufferedreader.close();
        }
        catch(Exception exception)
        {
            System.out.println("Erreur de lecture du fichier");
            System.exit(0);
        }
    }

    public String getLine(int i)
    {
        return lines[i];
    }

    public int getSize()
    {
        return size;
    }
}

//la classe Ville

public class Ville{
		
        private String nom;
        private int code,longitude,latitude,nbVilles;
        private Ville [] villes;
        private int [] distances;
        
        
        public Ville(String nom, int code, int longitude, int latitude){
                this.nom=nom;
                this.code=code;
                this.longitude=longitude;
                this.latitude=latitude;
                this.nbVilles = 0;
                this.villes = new Ville[10];
                this.distances = new int[10];              
                
                
        }
        public void addRoute(int distance, Ville ville) {
                villes[nbVilles] = ville;
                distances[nbVilles] = distance;
                nbVilles++;
        }

        public String toString() {
            return "(Ville: " + nom + ",code: " + code + ",longitude: "+longitude+",latitude: "+latitude+")" ;
          }
          
         public String getNom() {
                return nom;
        }
        public void setNom(String nom) {
                this.nom = nom;
        }
        public int getCode() {
                return code;
        }
        public void setCode(int code) {
                this.code = code;
        }
        public int getLongitude() {
                return longitude;
        }
        public void setLongitude(int longitude) {
                this.longitude = longitude;
        }
        public int getLatitude() {
                return latitude;
        }
        public void setLatitude(int latitude) {
                this.latitude = latitude;
        }

 
}

// La classe TouteslesVilles

import java.awt.Point;
import java.awt.Rectangle;
import java.util.*; //pour StringTokenizer
 
public class ToutesLesVilles{
		private String nom;
        private int nb,code, longitude,latitude;
        private Ville[] tville;
        private Ville ville;
        private Route[] routes;

 
        
        public  Ville[] charger(String fichier){
                
                
                
                FileTableau ft= new FileTableau(fichier);//chargement du fichier en créant un FileTableau
                final int nb=ft.getSize();
                System.out.println("nombre de ville dans le fichier ville.txt: "+nb);
                
                Ville tville[]= new Ville[nb];//déclaration d'un tableau contenant des objets ville
                
                
                
                for(int i=0;i<nb;i++)
                {
                        String lignelue= ft.getLine(i);
 
                        StringTokenizer st= new StringTokenizer(lignelue,";");
                        while (st.hasMoreTokens()) {
                        nom=st.nextToken();
                        code=Integer.parseInt(st.nextToken());
                        longitude=Integer.parseInt(st.nextToken());
                        latitude=Integer.parseInt(st.nextToken());
                        
                                tville[i]= new Ville(nom,code,longitude,latitude);
                            
                            
                                                 
                         }
                        
                }
 
                return tville;
        }
        
        public void chargerRoute(String fichier){
        	FileTableau ft = new FileTableau(fichier);
        	Route[] routes = new Route[ft.getSize()];
        	int r = 0;
        	for (int i = 0; i < ft.getSize(); i++) 
        	{
        				String lignelue = ft.getLine(i);
        				
        		        StringTokenizer st = new StringTokenizer(lignelue, ";");
        		        int villeA = Integer.parseInt(st.nextToken());
        		        int villeB = Integer.parseInt(st.nextToken());
        	            int distance = Integer.parseInt(st.nextToken());
        		        System.out.println((1 + i) + "/" + ft.getSize());
        		        Ville vilA = null;
        		        Ville vilB = null;
        		        int j = 0;
        		        while ((vilA == null || vilB == null) && j < tville.length) 
        		        {
        		             if (tville[j].getCode() == villeA) 
        		             {
        		                 vilA = tville[j];
        		        } 
        		             else if (tville[j].getCode() == villeB) 
        		             {
        		                  vilB = tville[j];
        		             }
        		             j++;
        		        }
        	}
        	
        }
        
        public Ville getVilleParNom(String nomVille){
                 int i = 0;
                    boolean trouve = false;
                    while(! trouve && i < nb) {
                      if (tville[i].getNom().equalsIgnoreCase(nomVille))
                      ville=new Ville(tville[i].getNom(),tville[i].getCode(),tville[i].getLongitude(),tville[i].getLatitude());
                      else
                          i++;
                    }
                
                    return ville;
        }
        
        public Ville getVilleParPosition(int x, int y) 
        {
               for (int i = 0; i < tville.length; i++) 
               {
        	        Rectangle rec = new Rectangle(tville[i].getLatitude(),tville[i].getLongitude(),4,4);
        	                        if (rec.contains(new Point(x,y)))
        	                                return tville[i];
        	   }  
        	                return null;
         }



        
}

// la classe route
public class Route {
	private int cd,ca,d;
	public Route(int coded, int codea, int dist)
	{
		this.cd = coded;
		this.ca = codea;
		this.d = dist;
	}
	public int getCoded(){
		return cd;
	}
	public int getCodea(){
		return ca;
	}
	public int getDist(){
		return d;
	}
	public void setCoded(int CodeD){
		this.cd = CodeD;
	}
	public void setCodea(int CodeA){
		this.ca = CodeA;
	}
	public void setDist(int Dist){
		this.d = Dist;
	}

}

// laclasse carte

import javax.swing.*;
import java.awt.*;
 
class Carte extends JPanel{
	
 
        /**    
	 *     
	 */
	private static final long serialVersionUID = -4216707929142555363L;
		public Carte(ToutesLesVilles maroc){
               setSize(1000,1000);
               t=maroc.charger("C:/Documents and Settings/Administrateur/Bureau/tout/carte/Ville.txt");
        }
   
        public void paint(Graphics g)
          {
        	super.paint(g);
        	Font f = new Font("time new roman", 2,11);
        	g.setFont(f);
            if(villeSelectionnee!=null)
                {
                    for(int i=0; i < t.length; i++)
                    {
                      if(t[i].getNom().equals(villeSelectionnee.getNom()))
                        {
                          g.setColor(Color.red);
                          g.drawString(t[i].getNom(), t[i].getLongitude()-25, t[i].getLatitude()-2);
                          g.fillRect(t[i].getLongitude(), t[i].getLatitude(), 2, 2);
                        }
                       else
                        {
                          g.setColor(Color.black);
                          g.drawString(t[i].getNom(), t[i].getLongitude()-25, t[i].getLatitude()-2);
                          g.fillRect(t[i].getLongitude(), t[i].getLatitude(), 2, 2);
                         }
                     }
                }
              else
                {
                   for(int i=0; i < t.length; i++)
                   {
                          g.setColor(Color.black);
                          g.drawString(t[i].getNom(), t[i].getLongitude()-25, t[i].getLatitude()-2);
                          g.fillRect(t[i].getLongitude(), t[i].getLatitude(), 2, 2);
                    }
                }

                
          }             
          
 
        public void update (Graphics g){
                super.update(g);
                paint(g);
        }
        
        public Ville getVilleselectionnee(){
        	return villeSelectionnee;
        }
        
        public void setVilleSelectionnee(Ville villeSelectionnee){
        	this.villeSelectionnee = villeSelectionnee;	
        }
        
        private Ville t[];
        private Ville villeSelectionnee;
        }
        

// la classe Mafenetre qui extends de JFrame

import java.io.*;
import java.util.*;

import java.awt.*;
import java.awt.event.*;


import javax.swing.*;
import javax.swing.event.*;

public class Mafenetre extends JFrame implements ActionListener, ItemListener{
	//la barre de menus
	JMenuBar br = new JMenuBar();
	  
	
	// Déclaration des menus
	JMenu F = new JMenu("Fichier");
	JMenu E = new JMenu("Help");
	JMenu A = new JMenu("Affichage");
	
	//Declarations des items de menus
	
	JMenuItem A_C = new JMenuItem("Afficher les informations d une ville");
	JMenuItem Q   = new JMenuItem("Quitter");
	JMenuItem C_A = new JMenuItem("Centre d aide");
	JMenuItem A_P = new JMenuItem("A propos du logiciel");
	JMenuItem C_C = new JMenuItem("Couleur de fond");
	
	//déclaration de panels
	private Carte pcentre;
	JPanel pest    = new JPanel();
	JPanel pestn   = new JPanel();
	JPanel pestc   = new JPanel();
	JPanel psud    = new JPanel();
	JPanel pnord   = new JPanel();
	JPanel pnord1  = new JPanel();
				
	
	JComboBox cb = new JComboBox();
	JComboBox cc = new JComboBox();
	public static final String[] nomcombo = {"dont le nom est","dont le code postale est"};
	JComboBox crech = new JComboBox(nomcombo);
	
	
	JLabel lvdep = new JLabel("Ville de départ");
	JLabel lvar  = new JLabel("Ville d'arrivée");
	JLabel lval  = new JLabel("Valider");
	JLabel ldist = new JLabel("Distance    :");
	JLabel ltemp = new JLabel("Temps       :");
	JLabel lvp   = new JLabel("Ville Proche:");
	JLabel lrech = new JLabel("Recherche d'une ville");
	JLabel nomv  = new JLabel("Nom ville");
	JLabel cdp   = new JLabel("Code postal");
	
	
	JTextField trech = new JTextField(20);
	JTextField ldistr= new JTextField(10);
	JTextField ltempr= new JTextField(10);
	JTextField nomvr = new JTextField(10);
	JTextField cdpr  = new JTextField(10);	
	
	
	//JButton rech = new JButton("rechercher");	
	JButton bok   = new JButton("OK");
	JButton brech = new JButton("Rechercher");
	
	private Ville[] t;
	private ToutesLesVilles maroc;
	
	public Mafenetre()
		{
			//Parametre de la fenetre, titre, taille, dimension
			
			this.setTitle("Réalisation d'un Maroc Routier");
			this.setSize(1024,768);
			this.setLayout(new BorderLayout(15,10));
			
			ldistr.setEditable(false);
			ltempr.setEditable(false);
			//nomvr.setEditable(false);
			//cdpr.setEditable(false);
			
			//Ecouteur sur  le combobox
			cb.addItemListener(this);
		
			
			//Ecouteur pour sortir de l application
			Q.addActionListener(this);
			
			//Ecouteur dans le menu affichage
			C_C.addActionListener(this);
			C_C.setToolTipText("Changer la couleur de fond");
			
			//Ecouteur sur le menu afficher les infos d une ville
			A_C.addActionListener(this);
			
			//ecouteur sur A_P
			A_P.addActionListener(this);			
			
			
			//Ajout des items sur le menu fichier
			
			F.add(A_C);
			F.add(Q);
			 
			//Ajout des items sur le menu aide
			E.add(C_A);
			E.add(A_P);
			
			//Ajout d un item sur le menu affichage
			A.add(C_C);
			
			
			
			//Ajout des menus : fichier et help sur la barre de menus
			br.add(F);
			br.add(A);
			br.add(E);
			
			
			//mettre la barre de menus sur la frame
			this.setJMenuBar(br);
			
			
			 
			//Proprieté de la frame une qui va contenir la carte
			//pcentre.setBackground(Color.red);
			ToutesLesVilles maroc=new  ToutesLesVilles();
			t=maroc.charger("C:/Documents and Settings/Administrateur/Bureau/tout/carte/Ville.txt");
			for(int i=0; i < t.length; i++)
				{
				try{
				cb.addItem(t[i].getNom());
				cc.addItem(t[i].getNom());
				   }
				catch(Exception a)
				{ }
				}
			pcentre = new Carte(maroc); 
		
								
						
			//Proprietés de la frame trois qui va contenir nos 2 labels avec les noms des réalisateurs et de l encadrant
			psud.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"Choix"));
			psud.setLayout(new BoxLayout(psud,BoxLayout.X_AXIS));
			psud.add(Box.createHorizontalStrut(20));
			psud.add(lvdep);
			psud.add(Box.createHorizontalStrut(10));
			psud.add(cb);
			psud.add(Box.createHorizontalStrut(20));
			psud.add(lvar);
			psud.add(Box.createHorizontalStrut(10));
			psud.add(cc);
			psud.add(Box.createHorizontalStrut(20));
			psud.add(bok);
			
			//panel nord
			pnord.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"Rechercher une ville"));
			pnord.setLayout(new BorderLayout());
			
			pnord.add(pnord1, BorderLayout.CENTER);
			pnord.setToolTipText("Rechercher une ville sur la carte");
			
			
			//panel nord 1 qui contient la zone de recherche
			
			//pnord1.setLayout(new BoxLayout(pnord1,BoxLayout.X_AXIS));
			pnord1.add(lrech);
		    pnord1.add(Box.createHorizontalStrut(1));
			pnord1.add(crech);
			pnord1.add(trech);
			pnord1.add(brech);
			
		
			//panel est
			pest.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"Resultat"));
			pest.setLayout(new BorderLayout());
			
			//panel est nord
			pestn.setLayout(new GridBagLayout());
			GridBagConstraints gbc = new GridBagConstraints();
			gbc.gridx = gbc.gridy = 0;
			gbc.gridwidth = 1;
			gbc.gridheight = 1;
			gbc.weightx = 0;
			gbc.weighty = 0;
			gbc.insets = new Insets(10, 15, 0, 0);
			pestn.add(ldist, gbc);
			
			gbc.gridx =1;
			gbc.gridy =0;
			gbc.gridwidth = 1;
			gbc.gridheight = 1;
			gbc.weightx = 0;
			gbc.weighty = 0;
			gbc.insets = new Insets(10, 15, 0, 0);
			pestn.add(ldistr, gbc);
			
			
			gbc.gridx = 0;
			gbc.gridy = 1;
			gbc.gridwidth = 1;
			gbc.gridheight = 1;
			gbc.weightx = 0;
			gbc.weighty = 0;
			gbc.insets = new Insets(10, 15, 0, 0);
			pestn.add(ltemp, gbc);
			
			
			gbc.gridx = 1;
			gbc.gridy = 1;
			gbc.gridwidth = 1;
			gbc.gridheight = 1;
			gbc.weightx = 0;
			gbc.weighty = 0;
			gbc.insets = new Insets(10, 15, 0, 0);
			pestn.add(ltempr, gbc);
			
			//panel est centre
			pestc.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"Infos sur ville"));
			pestc.setLayout(new GridBagLayout());
			GridBagConstraints gbcd = new GridBagConstraints();
			gbcd.gridx = gbc.gridy = 0;
			gbcd.gridwidth = 1;
			gbcd.gridheight = 1;
			gbcd.weightx = 0;
			gbcd.weighty = 0;
			gbcd.insets = new Insets(10, 15, 0, 0);
			pestc.add(nomv, gbcd);
			
			gbcd.gridx =1;
			gbcd.gridy =0;
			gbcd.gridwidth = 1;
			gbcd.gridheight = 1;
			gbcd.weightx = 0;
			gbcd.weighty = 0;
			gbcd.insets = new Insets(10, 15, 0, 0);
			pestc.add(nomvr, gbcd);
			
			
			gbcd.gridx = 0;
			gbcd.gridy = 1;
			gbcd.gridwidth = 1;
			gbcd.gridheight = 1;
			gbcd.weightx = 0;
			gbcd.weighty = 0;
			gbcd.insets = new Insets(10, 15, 0, 0);
			pestc.add(cdp, gbcd);
			
			
			gbcd.gridx = 1;
			gbcd.gridy = 1;
			gbcd.gridwidth = 1;
			gbcd.gridheight = 1;
			gbcd.weightx = 0;
			gbcd.weighty = 0;
			gbcd.insets = new Insets(10, 15, 0, 0);
			pestc.add(cdpr, gbcd);
			
			
		
			pest.add(pestn, BorderLayout.NORTH);
			pest.add(pestc, BorderLayout.CENTER);
			
			
			//Ajouter nos panels sur la frame
			this.add(pcentre,BorderLayout.CENTER);
			this.add(pest,BorderLayout.EAST);
			this.add(psud,BorderLayout.SOUTH);
			this.add(pnord,BorderLayout.NORTH);
		

}

	public void itemStateChanged(ItemEvent e){
		if(e.getStateChange() == ItemEvent.SELECTED){
			String texte = (String)cb.getSelectedItem();
		try{	
			pcentre.setVilleSelectionnee(maroc.getVilleParNom(texte));
			pcentre.setBackground(Color.red);
			pcentre.updateUI();
		}
		catch(Exception e1){
			System.out.println("Erreur");
		}
		}}
	
	public void actionPerformed(ActionEvent argo) {
		//Object source = argo.getSource();
		//int source = JFrame.EXIT_ON_CLOSE;
						
		if(argo.getSource() == Q)
			{
				int result = JOptionPane.showConfirmDialog(pcentre,"Voulez vous vraiment quittez l application","Quitter application",JOptionPane.YES_NO_OPTION);
				if(result == JOptionPane.YES_OPTION) System.exit(0);
			}
	
		if(argo.getSource() == C_C)
		{
			Color color = JColorChooser.showDialog(this,"Choix d'une couleur",Color.RED);
			pnord1.setBackground(color);
			pnord.setBackground(color);
			psud.setBackground(color);
			pest.setBackground(color);
			pestn.setBackground(color);
			pestc.setBackground(color);
			
			
		}
	
		if(argo.getSource() == A_C)
			{
				String string = JOptionPane.showInputDialog(null, "Entrez le nom de la ville") ;
				int rep = 0;
				if( string != null)
					{
						//System.out.println ("vous avez tapez:"+ string);
						for(int i=0; i<t.length; i++){
							if(t[i].getNom().equalsIgnoreCase(string)){
								System.out.println ("vous avez tapez:"+ string);
								System.out.println(+ t[i].getCode());
								nomvr.setText(t[i].getNom());
								//cdpr.setText(String(t[i].getCode()));
							}
					/*		if (t[i].getNom() != string){
								JOptionPane.showMessageDialog(this, "Entrer une ville");
								string = JOptionPane.showInputDialog(null, "Entrez le nom de la ville") ;
								}*/
						}
						
						
					}
				}
			
		if(argo.getSource() == brech)
			{
				for(int i = 0; i<t.length;i++){
				if(trech.getText().equals(t[i].getNom()))
				System.out.println("vous avez choisi"+ trech.getText());}
			}
	
	

			
		
	}

	
	
	
	
}

// La classe TInterface, la classe appelante

import java.util.*;

import java.awt.*;
import javax.swing.*;

public class TInterface {
	public static void main(String[]args)
	{	
		Dimension tailleEcran = Toolkit.getDefaultToolkit().getScreenSize();
		int hauteur = (int)tailleEcran.getHeight();
		int largeur = (int)tailleEcran.getWidth();
		
						
		//Initialisation d une nouvelle fenetre
		Mafenetre fen = new Mafenetre();
		
		
		//au centre de l'ecran
		fen.setLocation((largeur-fen.getWidth())/2,(hauteur - fen.getHeight())/2);
		
		
		//on rend notre fentre visible
		fen.setVisible(true);
		
		fen.setResizable(false);
	}

}

Aidez moi à contruire la classe itineraire et aussi pour le probleme de l'affichage quand je selectionne une ville.
Merci

fredericmazue

Quote:
Mon probleme se situe au niveau de l'étape 5 c a d à partir de l itineraire. Je n 'arrivepas à creer la classe Itineraire ni meme la methode pour la construction du plus court chemin.

Mais c'est que ce n'est pas anodin comme problème :)

Mais c'est un problème résolu par un mathématicien du nom de Dijkstra.
Et la méthode s'appelle fort pertinement l'algorithme de Dijkstra :)

Deux liens qui pourront t'être utiles:
http://www.gpa.etsmtl.ca/cours/gpa789/pdf/Dijsktra.pdf
http://fr.wikipedia.org/wiki/Algorithme_de_Dijkstra

Niroken

Bonjour,
Par rapport à ton énoncé :

Quote:

Pour aller d'une ville A vers une ville B, vous allez adopter la demarche suivante:

On se place en A.
On se deplace vers la ville voisine la plus proche de B.
On recommence l'étape précédente jusqu'à se situer en B.

Cet algorithme fonctionne dans la grande majorité des cas, mais pas toujours, comme vous le verrez par la suite.

et les premiers éléments donnés pour construire la classe itinéraire, je te propose ceci :

import java.util.ArrayList;
import java.util.List;

public class Itineraire {
    Ville mVilleDepart;
    Ville mVilleArrivee;
    List mVillesParcourues;
    
    public Itineraire(Ville pVilleDepart, Ville pVilleArrivee) {
        mVilleDepart = pVilleDepart;
        mVilleArrivee = pVilleArrivee;
        mVillesParcourues = new ArrayList();
    }
    
    public void calculeItineraire() {
        mVillesParcourues.add(mVilleDepart);
        Ville vVilleSuivanteTmp = mVilleDepart;
        
        while (!(vVilleSuivanteTmp = getVilleLaPlusProcheDeVilleArrivee(vVilleSuivanteTmp.mVillesVoisines)).equals(mVilleArrivee)) {
            mVillesParcourues.add(vVilleSuivanteTmp);
        }
        
        mVillesParcourues.add(mVilleArrivee);
    }
    
    public Ville getVilleLaPlusProcheDeVilleArrivee(Ville[] pVillesVoisines) {
        Ville vResult = pVillesVoisines[0];
        
        for (int i = 0; i < pVillesVoisines.length; i++) {
            if (vResult.getDistance(mVilleArrivee) < pVillesVoisines[i].getDistance(mVilleArrivee)) {
                vResult = pVillesVoisines[i];
            }
        }
        
        return vResult;
    }
}

class Ville {
    String mNom;
    Ville[] mVillesVoisines;
    int[] mDistancesVoisines;
    
    public int getDistance(Ville pVille) {
        return 0;
    }
    
    public boolean equals(Object pObject) {
        if (pObject instanceof Ville) {
            if (mNom != null && mNom.equals(((Ville) pObject).mNom)) {
                return true;
            }
        } 
        
        return false;
    }
}

Je n'ai pas testé ce bout de code, mais soyons confiants :D

Bonne chance,
Niroken

Niroken

Oops, j'ai laissé une coquille dans la méthode

getVilleLaPlusProcheDeVilleArrivee

Il faut inverser le sens du signe de comparaison "<".

Bonne chance,
Niroken

Niroken

Et pour finir :

Quote:

Rectification
Testez votre programme, par exemple de Bordeaux à Lille. Tout doit fonctionner correctement. Testez-le ensuite du Havre à Caen. Que se passe-t-il? Pourquoi? Comment rectifier cela?

En fait il se peut qu'il y ait des cas ou tu ne sors jamais de la boucle puisque d'après l'algo qui t aie proposé dans ton énoncé,
il n'y a pas de vérification si l'on est déjà passé par une ville ou non.

Il suffit de tenir compte de ça pour ne pas boucler.

Enfin la meilleure solution pour ce problème est la mise en place de l'algo
de Dijkstra, cf post de Frédéric.

Bonne chance,
Niroken

hervemoha

merci pour vos reponses, je vais essayer de voir avec ça. J ai aussi un autre probleme sur l'affichage.Quand je choisis une ville sur le combobox, la ville selectionnée doit s'afficher en couleur

public void itemStateChanged(ItemEvent e){ 
      if(e.getStateChange() == ItemEvent.SELECTED){ 
         String texte = (String)cb.getSelectedItem(); 
      try{    
         pcentre.setVilleSelectionnee(maroc.getVilleParNom(texte)); 
         pcentre.setBackground(Color.red); 
         pcentre.updateUI(); 
      } 
      catch(Exception e1){ 
         System.out.println("Erreur"); 
      } 
      }} 

je ne sais pas pourquoi ça me donne une erreur
Merci de votre aide
Niroken

Bonjour,

Quote:

je ne sais pas pourquoi ça me donne une erreur

J'ai envie de dire : moi non plus :D

Si tu postais le messsage d'erreur ca serait plus simple pour t'aider.
Ah et puis si tu pouvais aussi poster tes fichiers de villes et de routes
je tacherai de regarder ce qui ne va pas dans ton code.

Bonne chance,
Niroken

hervemoha

c'est un projet pour la réalisation d un guide routier du maroc. Voici donc ce que contient le fichier ville.txt et route.txt

//Ville.txt
ceuta;51701;540;70
Tanger;90000;461;73
Larache;92000;439;111
Kenitra;14000;416;150
Rabat;10000;400;171
Casablanca;20000;376;183
Mohammedia;20800;303;177
El Jadida;24000;338;192
Safi;46000;287;225
Essaouira;44000;261;255
Agadir;80000;231;378
Taroudannt;83000;263;383
Zagora;45900;457;359
Erfoud;52200;597;320
Errachidia;52000;340;384
Azrou;53100;505;247
Sefrou;31000;514;222
Fes;30000;485;175
Taza;35000;555;168
Oujda;60000;703;127
Nador;62000;679;110
Mellila;13200;635;88
Al Hoceima;32000;579;102
Tetouan;93000;513;90
Chefchaouen;91000;500;112
Ouezzane;16200;501;143
Meknes;50000;463;187
Beni Mellal;23000;412;273
Marrakech;40000;335;319
Ouarzazate;45000;393;338
Mhamid;45400;469;399
Tata;84000;302;397
Tiznit;85000;124;422
Tarfaya;70050;47;495
Figuig;61000;754;270

// Route.txt
51701;93000;40
51701;90000;100
90000;93000;60
90000;92000;85
92000;93000;105
92000;14000;106
14000;10000;45
14000;50000;50
10000;20000;70
10000;50000;130
10000;20800;50
20000;24000;100
20000;40000;240
20000;20800;30
24000;46000;140
24000;40000;200
46000;44000;150
46000;40000;160
44000;40000;175
44000;80000;190
80000;40000;260
80000;83000;70
80000;85000;90
80000;84000;265
83000;40000;280
83000;84000;195
45900;45000;165
45900;45400;60
45900;52200;250
52200;61000;440
52200;45000;315
52200;52000;80
52000;53100;280
52000;45000;310
52000;61000;400
53100;23000;30
53100;31000;50
53100;50000;60
31000;30000;60
30000;50000;50
30000;35000;120

et pour le message d erreur quand je selectione une ville, il m affiche ceci:
nombre de ville dans le fichier route.txt: 60

nombre de ville dans le fichier Ville.txt: 35

nombre de ville dans le fichier Ville.txt: 35
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Herve.Mafenetre.itemStateChanged(Mafenetre.java:335)
at javax.swing.JComboBox.fireItemStateChanged(Unknown Source)
at javax.swing.JComboBox.selectedItemChanged(Unknown Source)
at javax.swing.JComboBox.contentsChanged(Unknown Source)
at javax.swing.AbstractListModel.fireContentsChanged(Unknown Source)
at javax.swing.DefaultComboBoxModel.setSelectedItem(Unknown Source)
at javax.swing.JComboBox.setSelectedItem(Unknown Source)
at javax.swing.JComboBox.setSelectedIndex(Unknown Source)
at javax.swing.plaf.basic.BasicComboPopup$Handler.mouseReleased(Unknown Source)
at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at javax.swing.plaf.basic.BasicComboPopup$1.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Merci pour l'aide que vous m'apportez.
Je peux vous envoyez le dossier du projet pour voir ce qu il en est comme ça peut etre vous en saurez plus.Mais je penses avoir tt mis içi.
Je compte sur votre aide
Merci à ts

Niroken

Hello

J'ai donc regardé ton code et j'ai trouvé/résolu les erreurs.

Pour la majorité il y a bcp de confusion entre variables locales et membres d'une classe.

Je prend un exemple :

Ta classe MaFenetre déclare un membre

ToutesLesVilles maroc

Or dans ton constructeur MaFenetre tu redéclares maroc comme ceci :

ToutesLesVilles maroc=new  ToutesLesVilles(); 

La bonne solution est de faire :

maroc=new  ToutesLesVilles(); 

Conclusion dans ton cas : le membre maroc de Mafenetre ne sera jamais initialisé et restera à null.

Ce qui est plutot facheux pour la suite puisque quand tu changes un item
de ton combobox tu fais appel a ce bout de code :

pcentre.setVilleSelectionnee(maroc.getVilleParNom(texte)); 

maroc n'étant pas initialisé bim : nullPointerException

J'ai relevé les mêmes problèmes dans ta classe ToutesLesVilles avec les membres nb et tville.

Après il y a une autre "astuce" dans ton code : tu ajoutes le listener du combobox qui sélectionne les villes avant de déclarer la variable pcentre,
du coup a l'initialisation pcentre n'est pas initialisé et le code :

pcentre.setVilleSelectionnee(maroc.getVilleParNom(texte)); 

va péter une nullPointerException puisque pcentre est null.

Dans ce cas : c est crasseux mais ce n'est pas dramatique puisque cette erreur ne survient qu'une fois, la bonne solution consiste a déplacer l'init
de pcentre avant l'ajout du listener du combobox

Et pour finir je te poste ici les deux fichiers que j'ai corrigé :

import java.awt.Point; 
import java.awt.Rectangle; 
import java.util.*; //pour StringTokenizer 
  
public class ToutesLesVilles{ 
      private String nom; 
        private int nb,code, longitude,latitude; 
        private Ville[] tville; 
        private Ville ville; 
        private Route[] routes; 

  
        
        public  Ville[] charger(String fichier){ 
                
                
                
                FileTableau ft= new FileTableau(fichier);//chargement du fichier en créant un FileTableau 
                nb=ft.getSize(); 
                System.out.println("nombre de ville dans le fichier ville.txt: "+nb); 
                
                tville= new Ville[nb];//déclaration d'un tableau contenant des objets ville 
                
                
                
                for(int i=0;i<nb;i++) 
                { 
                        String lignelue= ft.getLine(i); 
  
                        StringTokenizer st= new StringTokenizer(lignelue,";"); 
                        while (st.hasMoreTokens()) { 
                        nom=st.nextToken(); 
                        code=Integer.parseInt(st.nextToken()); 
                        longitude=Integer.parseInt(st.nextToken()); 
                        latitude=Integer.parseInt(st.nextToken()); 
                        
                                tville[i]= new Ville(nom,code,longitude,latitude); 
                            
                            
                                                  
                         } 
                        
                } 
  
                return tville; 
        } 
        
        public Ville[] getTville() {
			return tville;
		}

		public void chargerRoute(String fichier){ 
           FileTableau ft = new FileTableau(fichier); 
           Route[] routes = new Route[ft.getSize()]; 
           int r = 0; 
           for (int i = 0; i < ft.getSize(); i++) 
           { 
                    String lignelue = ft.getLine(i); 
                     
                      StringTokenizer st = new StringTokenizer(lignelue, ";"); 
                      int villeA = Integer.parseInt(st.nextToken()); 
                      int villeB = Integer.parseInt(st.nextToken()); 
                       int distance = Integer.parseInt(st.nextToken()); 
                      System.out.println((1 + i) + "/" + ft.getSize()); 
                      Ville vilA = null; 
                      Ville vilB = null; 
                      int j = 0; 
                      while ((vilA == null || vilB == null) && j < tville.length) 
                      { 
                           if (tville[j].getCode() == villeA) 
                           { 
                               vilA = tville[j]; 
                      } 
                           else if (tville[j].getCode() == villeB) 
                           { 
                                vilB = tville[j]; 
                           } 
                           j++; 
                      } 
           } 
            
        } 
        
        public Ville getVilleParNom(String nomVille){ 
                 int i = 0; 
                    boolean trouve = false; 
                    while(! trouve && i < nb) { 
                      if (tville[i].getNom().equalsIgnoreCase(nomVille)) 
                      return new Ville(tville[i].getNom(),tville[i].getCode(),tville[i].getLongitude(),tville[i].getLatitude()); 
                      else 
                          i++; 
                    } 
                
                    return null; 
        } 
        
        public Ville getVilleParPosition(int x, int y) 
        { 
               for (int i = 0; i < tville.length; i++) 
               { 
                   Rectangle rec = new Rectangle(tville[i].getLatitude(),tville[i].getLongitude(),4,4); 
                                   if (rec.contains(new Point(x,y))) 
                                           return tville[i]; 
              }  
                           return null; 
         } 



        
}


import java.io.*; 
import java.util.*; 

import java.awt.*; 
import java.awt.event.*; 


import javax.swing.*; 
import javax.swing.event.*; 

public class Mafenetre extends JFrame implements ActionListener, ItemListener{ 
   //la barre de menus 
   JMenuBar br = new JMenuBar(); 
     
    
   // Déclaration des menus 
   JMenu F = new JMenu("Fichier"); 
   JMenu E = new JMenu("Help"); 
   JMenu A = new JMenu("Affichage"); 
    
   //Declarations des items de menus 
    
   JMenuItem A_C = new JMenuItem("Afficher les informations d une ville"); 
   JMenuItem Q   = new JMenuItem("Quitter"); 
   JMenuItem C_A = new JMenuItem("Centre d aide"); 
   JMenuItem A_P = new JMenuItem("A propos du logiciel"); 
   JMenuItem C_C = new JMenuItem("Couleur de fond"); 
    
   //déclaration de panels 
   private Carte pcentre; 
   JPanel pest    = new JPanel(); 
   JPanel pestn   = new JPanel(); 
   JPanel pestc   = new JPanel(); 
   JPanel psud    = new JPanel(); 
   JPanel pnord   = new JPanel(); 
   JPanel pnord1  = new JPanel(); 
             
    
   JComboBox cb = new JComboBox(); 
   JComboBox cc = new JComboBox(); 
   public static final String[] nomcombo = {"dont le nom est","dont le code postale est"}; 
   JComboBox crech = new JComboBox(nomcombo); 
    
    
   JLabel lvdep = new JLabel("Ville de départ"); 
   JLabel lvar  = new JLabel("Ville d'arrivée"); 
   JLabel lval  = new JLabel("Valider"); 
   JLabel ldist = new JLabel("Distance    :"); 
   JLabel ltemp = new JLabel("Temps       :"); 
   JLabel lvp   = new JLabel("Ville Proche:"); 
   JLabel lrech = new JLabel("Recherche d'une ville"); 
   JLabel nomv  = new JLabel("Nom ville"); 
   JLabel cdp   = new JLabel("Code postal"); 
    
    
   JTextField trech = new JTextField(20); 
   JTextField ldistr= new JTextField(10); 
   JTextField ltempr= new JTextField(10); 
   JTextField nomvr = new JTextField(10); 
   JTextField cdpr  = new JTextField(10);    
    
    
   //JButton rech = new JButton("rechercher");    
   JButton bok   = new JButton("OK"); 
   JButton brech = new JButton("Rechercher"); 
    
   private Ville[] t; 
   private ToutesLesVilles maroc; 
    
   public Mafenetre() 
      { 
         //Parametre de la fenetre, titre, taille, dimension 
          
         this.setTitle("Réalisation d'un Maroc Routier"); 
         this.setSize(1024,768); 
         this.setLayout(new BorderLayout(15,10)); 
          
         ldistr.setEditable(false); 
         ltempr.setEditable(false); 
         //nomvr.setEditable(false); 
         //cdpr.setEditable(false); 
          
         maroc=new  ToutesLesVilles(); 
         t=maroc.charger("C:/MyAtlas/Villes.txt"); 
         for(int i=0; i < t.length; i++) 
            { 
            try{ 
            cb.addItem(t[i].getNom()); 
            cc.addItem(t[i].getNom()); 
               } 
            catch(Exception a) 
            { } 
            } 
         pcentre = new Carte(maroc); 
         
         
         
         //Ecouteur sur  le combobox 
         cb.addItemListener(this); 
       
          
         //Ecouteur pour sortir de l application 
         Q.addActionListener(this); 
          
         //Ecouteur dans le menu affichage 
         C_C.addActionListener(this); 
         C_C.setToolTipText("Changer la couleur de fond"); 
          
         //Ecouteur sur le menu afficher les infos d une ville 
         A_C.addActionListener(this); 
          
         //ecouteur sur A_P 
         A_P.addActionListener(this);          
          
          
         //Ajout des items sur le menu fichier 
          
         F.add(A_C); 
         F.add(Q); 
          
         //Ajout des items sur le menu aide 
         E.add(C_A); 
         E.add(A_P); 
          
         //Ajout d un item sur le menu affichage 
         A.add(C_C); 
          
          
          
         //Ajout des menus : fichier et help sur la barre de menus 
         br.add(F); 
         br.add(A); 
         br.add(E); 
          
          
         //mettre la barre de menus sur la frame 
         this.setJMenuBar(br); 
          
          
          
         //Proprieté de la frame une qui va contenir la carte 
         //pcentre.setBackground(Color.red); 
         
       
                         
                   
         //Proprietés de la frame trois qui va contenir nos 2 labels avec les noms des réalisateurs et de l encadrant 
         psud.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"Choix")); 
         psud.setLayout(new BoxLayout(psud,BoxLayout.X_AXIS)); 
         psud.add(Box.createHorizontalStrut(20)); 
         psud.add(lvdep); 
         psud.add(Box.createHorizontalStrut(10)); 
         psud.add(cb); 
         psud.add(Box.createHorizontalStrut(20)); 
         psud.add(lvar); 
         psud.add(Box.createHorizontalStrut(10)); 
         psud.add(cc); 
         psud.add(Box.createHorizontalStrut(20)); 
         psud.add(bok); 
          
         //panel nord 
         pnord.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"Rechercher une ville")); 
         pnord.setLayout(new BorderLayout()); 
          
         pnord.add(pnord1, BorderLayout.CENTER); 
         pnord.setToolTipText("Rechercher une ville sur la carte"); 
          
          
         //panel nord 1 qui contient la zone de recherche 
          
         //pnord1.setLayout(new BoxLayout(pnord1,BoxLayout.X_AXIS)); 
         pnord1.add(lrech); 
          pnord1.add(Box.createHorizontalStrut(1)); 
         pnord1.add(crech); 
         pnord1.add(trech); 
         pnord1.add(brech); 
          
       
         //panel est 
         pest.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"Resultat")); 
         pest.setLayout(new BorderLayout()); 
          
         //panel est nord 
         pestn.setLayout(new GridBagLayout()); 
         GridBagConstraints gbc = new GridBagConstraints(); 
         gbc.gridx = gbc.gridy = 0; 
         gbc.gridwidth = 1; 
         gbc.gridheight = 1; 
         gbc.weightx = 0; 
         gbc.weighty = 0; 
         gbc.insets = new Insets(10, 15, 0, 0); 
         pestn.add(ldist, gbc); 
          
         gbc.gridx =1; 
         gbc.gridy =0; 
         gbc.gridwidth = 1; 
         gbc.gridheight = 1; 
         gbc.weightx = 0; 
         gbc.weighty = 0; 
         gbc.insets = new Insets(10, 15, 0, 0); 
         pestn.add(ldistr, gbc); 
          
          
         gbc.gridx = 0; 
         gbc.gridy = 1; 
         gbc.gridwidth = 1; 
         gbc.gridheight = 1; 
         gbc.weightx = 0; 
         gbc.weighty = 0; 
         gbc.insets = new Insets(10, 15, 0, 0); 
         pestn.add(ltemp, gbc); 
          
          
         gbc.gridx = 1; 
         gbc.gridy = 1; 
         gbc.gridwidth = 1; 
         gbc.gridheight = 1; 
         gbc.weightx = 0; 
         gbc.weighty = 0; 
         gbc.insets = new Insets(10, 15, 0, 0); 
         pestn.add(ltempr, gbc); 
          
         //panel est centre 
         pestc.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"Infos sur ville")); 
         pestc.setLayout(new GridBagLayout()); 
         GridBagConstraints gbcd = new GridBagConstraints(); 
         gbcd.gridx = gbc.gridy = 0; 
         gbcd.gridwidth = 1; 
         gbcd.gridheight = 1; 
         gbcd.weightx = 0; 
         gbcd.weighty = 0; 
         gbcd.insets = new Insets(10, 15, 0, 0); 
         pestc.add(nomv, gbcd); 
          
         gbcd.gridx =1; 
         gbcd.gridy =0; 
         gbcd.gridwidth = 1; 
         gbcd.gridheight = 1; 
         gbcd.weightx = 0; 
         gbcd.weighty = 0; 
         gbcd.insets = new Insets(10, 15, 0, 0); 
         pestc.add(nomvr, gbcd); 
          
          
         gbcd.gridx = 0; 
         gbcd.gridy = 1; 
         gbcd.gridwidth = 1; 
         gbcd.gridheight = 1; 
         gbcd.weightx = 0; 
         gbcd.weighty = 0; 
         gbcd.insets = new Insets(10, 15, 0, 0); 
         pestc.add(cdp, gbcd); 
          
          
         gbcd.gridx = 1; 
         gbcd.gridy = 1; 
         gbcd.gridwidth = 1; 
         gbcd.gridheight = 1; 
         gbcd.weightx = 0; 
         gbcd.weighty = 0; 
         gbcd.insets = new Insets(10, 15, 0, 0); 
         pestc.add(cdpr, gbcd); 
          
          
       
         pest.add(pestn, BorderLayout.NORTH); 
         pest.add(pestc, BorderLayout.CENTER); 
          
          
         //Ajouter nos panels sur la frame 
         this.add(pcentre,BorderLayout.CENTER); 
         this.add(pest,BorderLayout.EAST); 
         this.add(psud,BorderLayout.SOUTH); 
         this.add(pnord,BorderLayout.NORTH); 
       

} 

   public void itemStateChanged(ItemEvent e){ 
      if(e.getStateChange() == ItemEvent.SELECTED){ 
         String texte = (String)cb.getSelectedItem(); 
      try{    
         pcentre.setVilleSelectionnee(maroc.getVilleParNom(texte)); 
         pcentre.updateUI(); 
      } 
      catch(Exception e1){ 
         e1.printStackTrace(); 
      } 
      }} 
    
   public void actionPerformed(ActionEvent argo) { 
      //Object source = argo.getSource(); 
      //int source = JFrame.EXIT_ON_CLOSE; 
                   
      if(argo.getSource() == Q) 
         { 
            int result = JOptionPane.showConfirmDialog(pcentre,"Voulez vous vraiment quittez l application","Quitter application",JOptionPane.YES_NO_OPTION); 
            if(result == JOptionPane.YES_OPTION) System.exit(0); 
         } 
    
      if(argo.getSource() == C_C) 
      { 
         Color color = JColorChooser.showDialog(this,"Choix d'une couleur",Color.RED); 
         pnord1.setBackground(color); 
         pnord.setBackground(color); 
         psud.setBackground(color); 
         pest.setBackground(color); 
         pestn.setBackground(color); 
         pestc.setBackground(color); 
          
          
      } 
    
      if(argo.getSource() == A_C) 
         { 
            String string = JOptionPane.showInputDialog(null, "Entrez le nom de la ville") ; 
            int rep = 0; 
            if( string != null) 
               { 
                  //System.out.println ("vous avez tapez:"+ string); 
                  for(int i=0; i<t.length; i++){ 
                     if(t[i].getNom().equalsIgnoreCase(string)){ 
                        System.out.println ("vous avez tapez:"+ string); 
                        System.out.println(+ t[i].getCode()); 
                        nomvr.setText(t[i].getNom()); 
                        //cdpr.setText(String(t[i].getCode())); 
                     } 
               /*      if (t[i].getNom() != string){ 
                        JOptionPane.showMessageDialog(this, "Entrer une ville"); 
                        string = JOptionPane.showInputDialog(null, "Entrez le nom de la ville") ; 
                        }*/ 
                  } 
                   
                   
               } 
            } 
          
      if(argo.getSource() == brech) 
         { 
            for(int i = 0; i<t.length;i++){ 
            if(trech.getText().equals(t[i].getNom())) 
            System.out.println("vous avez choisi"+ trech.getText());} 
         } 
    
    

          
       
   } 

    
    
    
    
} 

Tu n'auras qua remettre correctement les chemins des fichiers "villes" et "routes"

Bonne chance,
Niroken

hervemoha
Slt

Merci bcp pour tes corrections, je vais essayer devoir ce que ça donne. En ttcas merci del'aide quevous m'apportez.
Aufait, pour le calcul du meilleur chemin entre les deux villes qu on doit selectionnées dans les combobox, comment vais je appeler cette methode dans la classe Mafenetre pour avoir le resultat c a d la distance puis afficher la route entre ces deuxvilles sur la carte
Merci d'avance

hervemoha
bsr

je n arrive pas à finir mon projet, j compte sur vous pourm'aider.
Merci

Niroken

En fait pour calculer le plus cours chemin ce n'est pas très difficile avec
ton énoncé.

Tu ajoutes à ton objet Carte un membre Itinéraire que tu instancie par défaut dont la signature est:

public class Itineraire {
  Ville mVilleDepart;
  Ville mVilleArrivee;
  List<Ville> mVillesParcourues;

  public Itineraire() {
    mVillesParcourues = new ArrayList<Ville>();
  }
    
  public Itineraire(Ville pVilleDepart, Ville pVilleArrivee) { 
    mVilleDepart = pVilleDepart;
    mVilleArrivee = pVilleArrivee;
    mVillesParcourues = new ArrayList<Ville>(); 
  } 
 
  public void calculeItineraire();

  public void getVilleDepart();

  public void getVilleArrivee();

  public void getVillesParcourues();

  public void setVilleDepart(Ville villeDepart);
	
  public void setVilleArrivee(Ville villeArrivee);
	
  public void setVillesParcourues(List<Ville> villesParcourues);

et fait référence au morceau de code que je t'ai passé qqes posts avant.
NB : Revoir le code de la méthode calculeDistance() je crains qu'il soit érroné.

Tu ajoutes a ton objet Carte une methode :

private void dessineItineraire(Graphics g) {
    	g.setColor(Color.blue);
    	
    	if (mItineraire.getVilleDepart() != null) {
    		g.drawString(
    				mItineraire.getVilleDepart().getNom(), 
    				mItineraire.getVilleDepart().getCoordonnees().x - 12, 
    				mItineraire.getVilleDepart().getCoordonnees().y - 2); 
        	g.fillRect(
        			mItineraire.getVilleDepart().getCoordonnees().x, 
        			mItineraire.getVilleDepart().getCoordonnees().y, 
        			2, 
        			2); 
    	}
    	
    	if (mItineraire.getVilleArrivee() != null) {
    		g.drawString(
    				mItineraire.getVilleArrivee().getNom(), 
    				mItineraire.getVilleArrivee().getCoordonnees().x  - 12, 
    				mItineraire.getVilleArrivee().getCoordonnees().y  - 2); 
        	g.fillRect(
        			mItineraire.getVilleArrivee().getCoordonnees().x, 
        			mItineraire.getVilleArrivee().getCoordonnees().y, 
        			2, 
        			2); 
    	}
    	
    	for (int i = 0; i < mItineraire.getVillesParcourues().size() - 1; i++) {
    		g.drawLine(
    				mItineraire.getVillesParcourues().get(i).getCoordonnees().x, 
    				mItineraire.getVillesParcourues().get(i).getCoordonnees().y, 
    				mItineraire.getVillesParcourues().get(i + 1).getCoordonnees().x, 
    				mItineraire.getVillesParcourues().get(i + 1).getCoordonnees().y);
    	}
    }

Des que tu sélectionnes une ville dans ton comboBox :
- deux cas de figure :
1 c est le comboBox ville de depart
2 c est le comboBox ville d arrivee

  public void itemStateChanged(ItemEvent e) {
		if (e.getSource().equals(mComboBoxVilleDepart)) {
			pcentre.getItineraire().setVilleDepart(#LaVilleSelectionnee#);
		} else if (e.getSource().equals(mComboBoxVilleArrivee)) {
			pcentre.getItineraire().setVilleArrivee(#LaVilleSelectionnee#);
		}
				
		pcentre.updateUi();
	}

Pour finir dès que tu appuies sur le bouton qui permet de lancer le calcul
de l itineraire tu fais :

  public void actionPerformed(ActionEvent e) {
    pcentre.getItineraire().calculeItineraire();
  }

Bonne chance,
Niroken

Niroken

Bonjour,

J'ai finalisé le projet d'hervemoha par rapport à son énoncé.
Pour ceux que cela pourrait intéresser, les sources ainsi que le code
compilé sont disponibles à l'url :
http://dedikam2.com//index.php?co=co&pp=pp&dl=dl&clef=5463202e1aed1ae5d5d63f2811d8e974

Petites précisions :
- un jre version 1.5 min est requis.
- les sources sont organisées par rapport à l'ide que j'utilise : Eclipse

Niroken

fredericmazue

Super ! :)

hervemoha
Salut

Merci pour le code posté mais j ai quelques problemes à son implémentation. J ai quelques erreurs pour la finir, ça me renvoie des erreurs. Je vous poste ça pour voir ce qu il en est


// la classe carte



import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;

import javax.swing.JPanel;

public class Carte extends JPanel{
	
	private static final long serialVersionUID = -4216707929142555363L;
	
	public Carte(ToutesLesVilles maroc){
           setSize(1000,1000);
           t=maroc.charger("C:/Documents and Settings/guy mena/Bureau/eclipse/Ville.txt");
    }
 
	public void paint(Graphics g)
    {
  	super.paint(g);
  	Font f = new Font("time new roman", 2,11);
  	g.setFont(f);
      if(villeSelectionnee!=null)
          {
              for(int i=0; i < t.length; i++)
              {
                if(t[i].getNom().equals(villeSelectionnee.getNom()))
                  {
                    g.setColor(Color.red);
                    g.drawString(t[i].getNom(), t[i].getLongitude()-25, t[i].getLatitude()-2);
                    g.fillRect(t[i].getLongitude(), t[i].getLatitude(), 2, 2);
                  }
                 else
                  {
                    g.setColor(Color.black);
                    g.drawString(t[i].getNom(), t[i].getLongitude()-25, t[i].getLatitude()-2);
                    g.fillRect(t[i].getLongitude(), t[i].getLatitude(), 2, 2);
                   }
               }
          }
        else
          {
             for(int i=0; i < t.length; i++)
             {
                    g.setColor(Color.black);
                    g.drawString(t[i].getNom(), t[i].getLongitude()-25, t[i].getLatitude()-2);
                    g.fillRect(t[i].getLongitude(), t[i].getLatitude(), 2, 2);
              }
          }

          
    }             
      

    public void update (Graphics g){
            super.update(g);
            paint(g);
    }
    
    public void dessineItineraire(Graphics g) { 
        g.setColor(Color.blue); 
        
        
		if (mItineraire.getVilleDepart() != null) { 
           g.drawString(mItineraire.getVilleDepart().getNom(),mItineraire.getVilleDepart().getCoordonnees().x - 12,mItineraire.getVilleDepart().getCoordonnees().y - 2); 
           g.fillRect(mItineraire.getVilleDepart().getCoordonnees().x,mItineraire.getVilleDepart().getCoordonnees().y,2,2); 
        } 
         
        if (mItineraire.getVilleArrivee() != null) { 
           g.drawString(mItineraire.getVilleArrivee().getNom(),mItineraire.getVilleArrivee().getCoordonnees().x  - 12,mItineraire.getVilleArrivee().getCoordonnees().y  - 2); 
            g.fillRect(mItineraire.getVilleArrivee().getCoordonnees().x,mItineraire.getVilleArrivee().getCoordonnees().y,2,2); 
        } 
         
        for (int i = 0; i < mItineraire.getVillesParcourues().size() - 1; i++) { 
           g.drawLine( 
                 mItineraire.getVillesParcourues().get(i).getCoordonnees().x, 
                 mItineraire.getVillesParcourues().get(i).getCoordonnees().y, 
                 mItineraire.getVillesParcourues().get(i + 1).getCoordonnees().x, 
                 mItineraire.getVillesParcourues().get(i + 1).getCoordonnees().y); 
        } 
     } 

    
    public Ville getVilleselectionnee(){
    	return villeSelectionnee;
    }
    
    public void setVilleSelectionnee(Ville villeSelectionnee){
    	this.villeSelectionnee = villeSelectionnee;	
    }
    
    private Ville t[];
    private Ville villeSelectionnee;
    Itineraire itineraireSelectionne, mItineraire;
    

}

// la classe Itineraire



import java.awt.List;
import java.util.ArrayList;

public class Itineraire {
	Ville [] villes;
	Ville ville;
	Itineraire itineraireSelectionne ;
	private int meilleureVille;
	private int meilleureDistance;
	private int [][] matriceDistance;
	private int[] tabDistance;
	private int[] ville1;
	private int[] ville2;
	private int[] tabTotal;
	private int[][] tabVille1;
	private int[][] tabVille2;
	private int[][] tabDistancebis;
	private int[] tabTotalbis;
	Ville mVilleDepart; 
	Ville mVilleArrivee; 
	ArrayList<Ville> mVillesParcourues; 
	
	public Itineraire() { 
		    mVillesParcourues = new ArrayList<Ville>(); 
		  } 
	
	public void calculeItineraire(){
		
	}

	  public void getVilleDepart(){
		  
	  }

	  public void getVilleArrivee(){
		  
	  }

	  public void getVillesParcourues(){
		  
	  }

	  public void setVilleDepart(Ville villeDepart){
		  
	  }
	    
	  public void setVilleArrivee(Ville villeArrivee){
		  
	  }
	    
	  public void setVillesParcourues(ArrayList<Ville> villesParcourues){
		  
	  }


	
	public Itineraire(Ville pVilleDepart,Ville pVilleArrivee){
		mVilleDepart = pVilleDepart; 
	    mVilleArrivee = pVilleArrivee; 
	    mVillesParcourues = new ArrayList<Ville>(); 

		
	}

	
	public Ville getVilleParNom(String nomVille){
    	
    	return ville;
    }
	
	public boolean contains(Ville v){
		 for(int i=0;i<villes.length;i++)
	        {
	            if  (villes[i]==v)  return  true;   //oui
	        }
	        return  false;  //non
	}

	public void setItineraireSelectionne(Itineraire i){
		
		this.itineraireSelectionne = i;
	}

	public void construireItineraire(){ 
		
		int ligne, colonne,cptVille,testVilleExistante,total,touteVille; 
		touteVille=0; 
		this.meilleureVille=-1; 
		this.meilleureDistance=1000000; 
		while (touteVille<this.matriceDistance.length){ 
			
			ligne=0; 
			colonne=0; 
			cptVille=0; 
			testVilleExistante=0; 
			total=0; 
			for(int j=0;j<this.matriceDistance.length;j++){
				
				this.tabDistance[j] = 1000000; 
			} 

			this.ville1[cptVille] = touteVille; 
			if (this.matriceDistance[ville1[cptVille]][colonne] == -1){
				
				colonne++; 
			} 
			this.ville2[cptVille]=colonne; 

			this.tabDistance[cptVille]=this.matriceDistance[ville1[cptVille]][ville2[cptVille]]; 
			colonne++; 
			while(ligne < ((this.matriceDistance.length-1))){
				
				while(colonne < ((this.matriceDistance.length-1))){
					
					while (testVilleExistante<=cptVille)
					{
						
						if (colonne == this.ville1[testVilleExistante]) 
						{ 
							colonne++; 
							testVilleExistante=-1; 
						} 
						testVilleExistante++; 
					} 
						testVilleExistante=0; 

	if ((colonne < this.matriceDistance.length) && (this.matriceDistance[ville1[cptVille]][colonne] != -1)) 
	{ 
		if (this.tabDistance[cptVille] > this.matriceDistance[ville1[cptVille]][colonne]) 
			{ 
				this.tabDistance[cptVille] = this.matriceDistance[ville1[cptVille]][colonne]; 
				this.ville2[cptVille] = colonne; 
			} 
	} 
		colonne++; 
	} 
				colonne = 0; 
				ville1[cptVille+1] = ville2[cptVille]; 
				cptVille++; 
				ligne++; 
	} 
	this.ville2[cptVille]=touteVille; 
	this.tabDistance[cptVille]=this.matriceDistance[this.ville1[cptVille]][this.ville2[cptVille]]; 
	for(int j=0;j<this.matriceDistance.length;j++) 
	{ 
	total=total+this.tabDistance[j]; 
	} 
	this.tabTotal[touteVille]=total; 

	for(int k=0;k<this.matriceDistance.length;k++) 
	{ 
	this.tabVille1[touteVille][k]=ville1[k]; 
	this.tabVille2[touteVille][k]=ville2[k]; 
	this.tabDistancebis[touteVille][k]=this.tabDistance[k]; 
	this.tabTotalbis[touteVille]=total; 
	} 
	touteVille++; 
	} 
	for(int j=0;j<this.matriceDistance.length;j++) 
	{ 
	if (this.meilleureDistance > this.tabTotal[j]) 
	{ 
	this.meilleureDistance=this.tabTotal[j]; 
	this.meilleureVille=j; 
	} 
	} 
	System.out.println(); 
	} 
	
}

// la classe Mafenetre




import java.io.*; 
import java.util.*; 

import java.awt.*; 
import java.awt.event.*; 


import javax.swing.*; 
import javax.swing.event.*; 

public class Mafenetre extends JFrame implements ActionListener, ItemListener{ 
   //la barre de menus 
   JMenuBar br = new JMenuBar(); 
      
    
   // Déclaration des menus 
   JMenu F = new JMenu("Fichier"); 
   JMenu E = new JMenu("Help"); 
   JMenu A = new JMenu("Affichage"); 
    
   //Declarations des items de menus 
    
   JMenuItem A_C = new JMenuItem("Afficher les informations d une ville"); 
   JMenuItem Q   = new JMenuItem("Quitter"); 
   JMenuItem C_A = new JMenuItem("Centre d aide"); 
   JMenuItem A_P = new JMenuItem("A propos du logiciel"); 
   JMenuItem C_C = new JMenuItem("Couleur de fond"); 
    
   //déclaration de panels 
   private Carte pcentre; 
   JPanel pest    = new JPanel(); 
   JPanel pestn   = new JPanel(); 
   JPanel pestc   = new JPanel(); 
   JPanel psud    = new JPanel(); 
   JPanel pnord   = new JPanel(); 
   JPanel pnord1  = new JPanel(); 
              
    
   JComboBox cb = new JComboBox(); 
   JComboBox cc = new JComboBox(); 
   public static final String[] nomcombo = {"dont le nom est","dont le code postale est"}; 
   JComboBox crech = new JComboBox(nomcombo); 
    
    
   JLabel lvdep = new JLabel("Ville de départ"); 
   JLabel lvar  = new JLabel("Ville d'arrivée"); 
   JLabel lval  = new JLabel("Valider"); 
   JLabel ldist = new JLabel("Distance    :"); 
   JLabel ltemp = new JLabel("Temps       :"); 
   JLabel lvp   = new JLabel("Ville Proche:"); 
   JLabel lrech = new JLabel("Recherche d'une ville"); 
   JLabel nomv  = new JLabel("Nom ville"); 
   JLabel cdp   = new JLabel("Code postal"); 
    
    
   JTextField trech = new JTextField(20); 
   JTextField ldistr= new JTextField(10); 
   JTextField ltempr= new JTextField(10); 
   JTextField nomvr = new JTextField(10); 
   JTextField cdpr  = new JTextField(10);    
    
    
   //JButton rech = new JButton("rechercher");    
   JButton bok   = new JButton("OK"); 
   JButton brech = new JButton("Rechercher"); 
    
   private Ville[] t; 
   private ToutesLesVilles maroc; 
    
   public Mafenetre() 
      { 
         //Parametre de la fenetre, titre, taille, dimension 
          
         this.setTitle("Réalisation d'un Maroc Routier"); 
         this.setSize(1024,768); 
         this.setLayout(new BorderLayout(15,10)); 
          
         ldistr.setEditable(false); 
         ltempr.setEditable(false); 
         //nomvr.setEditable(false); 
         //cdpr.setEditable(false); 
          
         maroc=new  ToutesLesVilles(); 
         t=maroc.charger("C:/Documents and Settings/guy mena/Bureau/eclipse/Ville.txt"); 
         for(int i=0; i < t.length; i++) 
            { 
            try{ 
            cb.addItem(t[i].getNom()); 
            cc.addItem(t[i].getNom()); 
               } 
            catch(Exception a) 
            { } 
            } 
         pcentre = new Carte(maroc); 
          
            
          
         //Ecouteur sur  le combobox 
         cb.addItemListener(this); 
         cc.addItemListener(this);
          
         //Ecouteur pour sortir de l application 
         Q.addActionListener(this); 
          
         //Ecouteur dans le menu affichage 
         C_C.addActionListener(this); 
         C_C.setToolTipText("Changer la couleur de fond"); 
          
         //Ecouteur sur le menu afficher les infos d une ville 
         A_C.addActionListener(this); 
          
         //ecouteur sur A_P 
         A_P.addActionListener(this);          
          
          
         //Ajout des items sur le menu fichier 
          
         F.add(A_C); 
         F.add(Q); 
          
         //Ajout des items sur le menu aide 
         E.add(C_A); 
         E.add(A_P); 
          
         //Ajout d un item sur le menu affichage 
         A.add(C_C); 
          
          
          
         //Ajout des menus : fichier et help sur la barre de menus 
         br.add(F); 
         br.add(A); 
         br.add(E); 
          
          
         //mettre la barre de menus sur la frame 
         this.setJMenuBar(br); 
          
          
          
         //Proprieté de la frame une qui va contenir la carte 
         //pcentre.setBackground(Color.red); 
          
        
                          
                    
         //Proprietés de la frame trois qui va contenir nos 2 labels avec les noms des réalisateurs et de l encadrant 
         psud.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"Choix")); 
         psud.setLayout(new BoxLayout(psud,BoxLayout.X_AXIS)); 
         psud.add(Box.createHorizontalStrut(20)); 
         psud.add(lvdep); 
         psud.add(Box.createHorizontalStrut(10)); 
         psud.add(cb); 
         psud.add(Box.createHorizontalStrut(20)); 
         psud.add(lvar); 
         psud.add(Box.createHorizontalStrut(10)); 
         psud.add(cc); 
         psud.add(Box.createHorizontalStrut(20)); 
         psud.add(bok); 
          
         //panel nord 
         pnord.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"Rechercher une ville")); 
         pnord.setLayout(new BorderLayout()); 
          
         pnord.add(pnord1, BorderLayout.CENTER); 
         pnord.setToolTipText("Rechercher une ville sur la carte"); 
          
          
         //panel nord 1 qui contient la zone de recherche 
          
         //pnord1.setLayout(new BoxLayout(pnord1,BoxLayout.X_AXIS)); 
         pnord1.add(lrech); 
         pnord1.add(Box.createHorizontalStrut(1)); 
         pnord1.add(crech); 
         pnord1.add(trech); 
         pnord1.add(brech); 
          
        
         //panel est 
         pest.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"Resultat")); 
         pest.setLayout(new BorderLayout()); 
          
         //panel est nord 
         pestn.setLayout(new GridBagLayout()); 
         GridBagConstraints gbc = new GridBagConstraints(); 
         gbc.gridx = gbc.gridy = 0; 
         gbc.gridwidth = 1; 
         gbc.gridheight = 1; 
         gbc.weightx = 0; 
         gbc.weighty = 0; 
         gbc.insets = new Insets(10, 15, 0, 0); 
         pestn.add(ldist, gbc); 
          
         gbc.gridx =1; 
         gbc.gridy =0; 
         gbc.gridwidth = 1; 
         gbc.gridheight = 1; 
         gbc.weightx = 0; 
         gbc.weighty = 0; 
         gbc.insets = new Insets(10, 15, 0, 0); 
         pestn.add(ldistr, gbc); 
          
          
         gbc.gridx = 0; 
         gbc.gridy = 1; 
         gbc.gridwidth = 1; 
         gbc.gridheight = 1; 
         gbc.weightx = 0; 
         gbc.weighty = 0; 
         gbc.insets = new Insets(10, 15, 0, 0); 
         pestn.add(ltemp, gbc); 
          
          
         gbc.gridx = 1; 
         gbc.gridy = 1; 
         gbc.gridwidth = 1; 
         gbc.gridheight = 1; 
         gbc.weightx = 0; 
         gbc.weighty = 0; 
         gbc.insets = new Insets(10, 15, 0, 0); 
         pestn.add(ltempr, gbc); 
          
         //panel est centre 
         pestc.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"Infos sur ville")); 
         pestc.setLayout(new GridBagLayout()); 
         GridBagConstraints gbcd = new GridBagConstraints(); 
         gbcd.gridx = gbc.gridy = 0; 
         gbcd.gridwidth = 1; 
         gbcd.gridheight = 1; 
         gbcd.weightx = 0; 
         gbcd.weighty = 0; 
         gbcd.insets = new Insets(10, 15, 0, 0); 
         pestc.add(nomv, gbcd); 
          
         gbcd.gridx =1; 
         gbcd.gridy =0; 
         gbcd.gridwidth = 1; 
         gbcd.gridheight = 1; 
         gbcd.weightx = 0; 
         gbcd.weighty = 0; 
         gbcd.insets = new Insets(10, 15, 0, 0); 
         pestc.add(nomvr, gbcd); 
          
          
         gbcd.gridx = 0; 
         gbcd.gridy = 1; 
         gbcd.gridwidth = 1; 
         gbcd.gridheight = 1; 
         gbcd.weightx = 0; 
         gbcd.weighty = 0; 
         gbcd.insets = new Insets(10, 15, 0, 0); 
         pestc.add(cdp, gbcd); 
          
          
         gbcd.gridx = 1; 
         gbcd.gridy = 1; 
         gbcd.gridwidth = 1; 
         gbcd.gridheight = 1; 
         gbcd.weightx = 0; 
         gbcd.weighty = 0; 
         gbcd.insets = new Insets(10, 15, 0, 0); 
         pestc.add(cdpr, gbcd); 
          
          
        
         pest.add(pestn, BorderLayout.NORTH); 
         pest.add(pestc, BorderLayout.CENTER); 
          
          
         //Ajouter nos panels sur la frame 
         this.add(pcentre,BorderLayout.CENTER); 
         this.add(pest,BorderLayout.EAST); 
         this.add(psud,BorderLayout.SOUTH); 
         this.add(pnord,BorderLayout.NORTH); 
        

} 

  /* public void itemStateChanged (ItemEvent e){ 
      if(e.getStateChange() == ItemEvent.SELECTED){ 
         String texte = (String)cb.getSelectedItem();
         
      try{    
         pcentre.setVilleSelectionnee(maroc.getVilleParNom(texte)); 
         pcentre.updateUI(); 
      } 
      catch(Exception e1){ 
         e1.printStackTrace(); 
      } 
      }
     
   } */
  /* public void itemStateChanged(ItemEvent e){
	   if(e.getSource()== cb){
		   if(e.getStateChange() == ItemEvent.SELECTED){ 
		         String texte = (String)cb.getSelectedItem();
		         
		      try{    
		         pcentre.setVilleSelectionnee(maroc.getVilleParNom(texte)); 
		         pcentre.updateUI(); 
		      } 
		      catch(Exception e1){ 
		         e1.printStackTrace(); 
		      } 
		      }
	   }
	   
	   if(e.getSource() == cc){
		   if(e.getStateChange() == ItemEvent.SELECTED){ 
		         String texte = (String)cc.getSelectedItem();
		         
		      try{    
		         pcentre.setVilleSelectionnee(maroc.getVilleParNom(texte)); 
		         pcentre.updateUI(); 
		      } 
		      catch(Exception e1){ 
		         e1.printStackTrace(); 
		      } 
		      }
	   }
   }*/
   
   public void itemStateChanged(ItemEvent e) { 
	      if (e.getSource().equals(cb)) { 
	         pcentre.getItineraire().setVilleDepart(#LaVilleSelectionnee#); 
	      } else if (e.getSource().equals(cc)) { 
	         pcentre.getItineraire().setVilleArrivee(#LaVilleSelectionnee#); 
	      } 
	             
	      pcentre.updateUI(); 
	   } 

    
   public void actionPerformed(ActionEvent argo) { 
      //Object source = argo.getSource(); 
      //int source = JFrame.EXIT_ON_CLOSE; 
                    
      if(argo.getSource() == Q) 
         { 
            int result = JOptionPane.showConfirmDialog(pcentre,"Voulez vous vraiment quittez l application","Quitter application",JOptionPane.YES_NO_OPTION); 
            if(result == JOptionPane.YES_OPTION) System.exit(0); 
         } 
    
      if(argo.getSource() == C_C) 
      { 
         Color color = JColorChooser.showDialog(this,"Choix d'une couleur",Color.RED); 
         pnord1.setBackground(color); 
         pnord.setBackground(color); 
         psud.setBackground(color); 
         pest.setBackground(color); 
         pestn.setBackground(color); 
         pestc.setBackground(color); 
          
          
      } 
    
      if(argo.getSource() == A_C) 
         { 
            String string = JOptionPane.showInputDialog(null, "Entrez le nom de la ville") ; 
            int rep = 0; 
            if( string != null) 
               { 
                  //System.out.println ("vous avez tapez:"+ string); 
                  for(int i=0; i<t.length; i++){ 
                     if(t[i].getNom().equalsIgnoreCase(string)){ 
                        System.out.println ("vous avez tapez:"+ string); 
                        System.out.println(+ t[i].getCode()); 
                        nomvr.setText(t[i].getNom()); 
                        try{    
                            pcentre.setVilleSelectionnee(maroc.getVilleParNom(string)); 
                            pcentre.updateUI(); 
                         } 
                         catch(Exception e1){ 
                            e1.printStackTrace(); 
                         } 
                        //cdpr.setText(String(t[i].getCode())); 
                     } 
               /*      if (t[i].getNom() != string){ 
                        JOptionPane.showMessageDialog(this, "Entrer une ville"); 
                        string = JOptionPane.showInputDialog(null, "Entrez le nom de la ville") ; 
                        }*/ 
                  } 
                    
                    
               } 
            } 
          
      if(argo.getSource() == brech) 
         { 
            for(int i = 0; i<t.length;i++){ 
            if(trech.getText().equals(t[i].getNom())) 
            System.out.println("vous avez choisi"+ trech.getText());} 
         } 
    
    

          
        
   } 

    
    
    
    
} 

Je compte sur vous
Merci bcp
a plus
hervemoha
merci

ohh, je n avais pas vu votre dernier message, je vais zde suite voir ce qu il en est dans ce lien. Merci bcp de votre aide. J aimerai au moins une petite explication de ce qui ne va pas sur mon code(voir dernier message).
Merci bcp

Niroken

Hmmm dis donc l'ami faudrait mettre un peu de bonne volonté la :twisted:

Quand tu vois ceci dans le code de la classe carte :

mItineraireSelectionne.getVilleDepart()

et quand tu vois ceci dans ta classe itinéraire :

public void getVilleDepart(){ 
        
} 

A quoi penses tu hmmm?

Bon moi je t'avoue je pense a un code qui n'est pas prêt de marcher :D
La méthode getVilleDepart() ainsi que getVilleArrivee devrait avoir les signatures :

public Ville getVilleDepart();
        
public Ville getVilleArrivee();

Ensuite si tu leur mettais un petit qq chose dedans par exemple :

public Ville getVilleDepart() {
    return mVilleDepart;
}

public Ville getVilleDepart() {
    return mVilleArrivee;
}

Ca devrait aller mieux :)

Bon allez jte laisse finir!
Bonne chance,
Niroken

fredericmazue

Quote:
Ensuite si tu leur mettais un petit qq chose dedans par exemple :

Ca serait un minimum :lol: :lol:

Au fait Niroken, quand nous mets tu en ligne un super tuto ? Tu as vu ? En plus des cent Euro, il y a une licence ALLCpature à gagner désormais :)

Le monde Java c'est tellement grand, tu vas bien trouver un sujet :)

hervemoha
okkkk

ok et merci pour votre conseil, j essaiyerai d y mettre plus du coeur. Au fait pour celui que vous avez compilé, quand je l importe comment je faais pour la classpath?
merci

Niroken

La version compilée contient :
1 dossier d'input avec Villes.txt et Routes.txt
1 le MyAtlas.jar
1 runMyAtlas.bat
1 setEnv.bat

Pour executer le jar il suffit donc de cliquer sur le runMyAtlas.bat.

Pour info, le runMyAtlas.bat à cette tete :

call setEnv.bat

@echo on

java -classpath %CLASSPATH% Program %1

et le setEnv.bat ressemble à ceci :

@echo off

SET CLASSPATH=.
SET CLASSPATH=%CLASSPATH%;.\input\

Si tu regardes attentivement tu verras que le classpath est donc setté
par les directives du setEnv.bat.

Conclusion : sous réserve que tout se passe bien tu n'as qu'a double cliquer sur le runMyAtlas.bat

Bonne chance,
Niroken

hervemoha
Salut

Oui j ai fait ce que vous m aviez conseiller mais je me bute face à un problème, la methode

public void getcoordonnees(){
}

et la methode

public Itineraire getItineraire(){
}

Merci de votre aide et si vous avez un peu de temps, j aimerai une petite explication de la maniere dont vous avez fait ce mme projet :D .
Pour celui qui n 'est pas compilé(SRC), comment fait on pour les fichiers Villes.txt et Routes.txt.
a pluq et merci encore

fredericmazue

Je me permets d'intervenir sans vraiment avoir suivi la discussion mais

public void getcoordonnees(){ 
} 

Une méthode getcoordonnes (qui devrait d'ailleurs être renommée en getCoodonnees dans les conventions Java), si l'on en croit son nom, retourne quelque chose. Ce quelque chose est probablement des coordonnées d'ailleurs. ;)

Bref la méthode ne peut pas avoir une signature void :!:

C'est un point que notre ami Niroken avait bien expliqué plus tôt dans la discussion je crois.

hervemoha
hi

oui je sais que cette signature doit retourner des choses, les coordonnées sont des entires, ça doit avoir cette forme :

public int getcoordonnes(){
}

mais comment fait on pour retourner ces valeurs si on en a plusieurs?
 :D 
fredericmazue

Tu peux les mettre dans un conteneur. Une ArrayList par exemple

Ou s'il y a très peu de données à traiter, peut être simplement un tableau

public int[] getCoordonnées(){}

Niroken

Hello,

Quote:

Merci de votre aide et si vous avez un peu de temps, j aimerai une petite explication de la maniere dont vous avez fait ce mme projet

Hmm, je veux bien t 'expliquer ca posément, il faudrait que tu m'envoies ton msn.

Quote:

Pour celui qui n 'est pas compilé(SRC), comment fait on pour les fichiers Villes.txt et Routes.txt.

En effet, la j'ai oublié d'intégrer les fichiers Villes.txt et Routes.txt dans le zip SRC, tu peux les récupérer depuis le l'autre zip.

Tu dois garder à l'esprit que ces fichiers doivent être dans le classpath de l'application si tu veux que ca marche bien :D
D'ailleurs, mon conseil d'une manière générale est de toujours mettre les fichiers de confs ou de paramètres dans le classpath de l'appli :
- La config de l'appli ne se fera qu'a un seul endroit : ici dans le setEnv.bat
- Les chemins de tes fichiers ne sont pas en dur dans le code ce qui est bcp plus souple, si tu veux changer un chemin tu n'es pas obligé de recompiler :)

Bonne chance,
Niroken

hervemoha
hello

ok ok mais je n ai pas tres bien compris, je vous envoie mon msn par msg privé. Et pour les mes deux methodes qui bloquent mon apli, qu en dites vous?

Niroken

Pour les méthodes qui te posent problème il faut voir le problème comme suit :

Des coordonnées ce sont des points, j'avais utilisé la classe Point de java.awt, le code correspondant devrait ressembler à ca.

import java.awt.Point;

public class UneClasseAvecDesCoordonnees {

    private Point mCoordonnees;

    public void setCoordonnees(Point pCoordonnees) {
        mCoordonnees = pCoordonnees;
    }

    public Point getCoordonnees() {
        return mCoordonnees;
    }
    
}

Bonne chance,
Niroken