next up previous
monter: Applets: exercices pour débutants précédent: Exercice 3: prix HT

Exercice 4: villes de France

Voici un squelette d'Applet:

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Carte extends Applet{
    java.awt.Image[] tbimg;
    java.awt.Image img;
    java.awt.Image current;
    Point[] lesPoints;
    public void init(){
	this.addMouseMotionListener(new Listener(this));
	tbimg = new java.awt.Image[8];
	lesPoints = new Point[8];
	lesPoints[0] = new Point(245,215);
	lesPoints[1] = new Point(260,129);
	lesPoints[2] = new Point(400,212);
	lesPoints[3] = new Point(121,278);
	lesPoints[4] = new Point(153,383);
	lesPoints[5] = new Point(335,450);
	lesPoints[6] = new Point(320,344);
	lesPoints[7] = new Point(209,438);
	tbimg[0] = getImage(getCodeBase(),"pparis.jpg");
	tbimg[1] = getImage(getCodeBase(),"llille.jpg");
	tbimg[2] = getImage(getCodeBase(),"sstrasbourg.jpg");
	tbimg[3] = getImage(getCodeBase(),"nantes.jpg");
	tbimg[4] = getImage(getCodeBase(),"bordeaux.jpg");
	tbimg[5] = getImage(getCodeBase(),"mmarseille.jpg");
	tbimg[6] = getImage(getCodeBase(),"llyon.jpg");
	tbimg[7] = getImage(getCodeBase(),"ttoulouse.jpg");
	img = getImage(getCodeBase(),"france.png");
    }
    public void paint(Graphics g){
	g.drawImage(img,0,101,this);
	g.setColor(Color.RED);
	for (int i=0; i<8; i++){
	    g.fillOval((int) lesPoints[i].getX()-4,
		       (int) lesPoints[i].getY()-4,8,8);
	}
    }
    public void update(Graphics g){
	g.drawImage(img,0,101,this);
	if (current != null){
	    g.setColor(Color.WHITE);
	    g.fillRect(0,0,200,100);
	    g.drawImage(current,0,0,this);
	}
	g.setColor(Color.RED);
	for (int i=0; i<8; i++){
	    g.fillOval((int) lesPoints[i].getX()-4,
		       (int) lesPoints[i].getY()-4,8,8);
	}
    }
}
class Listener extends MouseMotionAdapter{
    Carte app;
    Listener(Carte im){
	app = im;
    }
    public void mouseMoved(MouseEvent e){
	int i;
	for (i=0; i<8; i++){
	    if (app.lesPoints[i].distance(e.getPoint())<30)
		break;
	}
	if ((i<8) && (app.current != app.tbimg[i])){
	  // une ligne a ajouter
	    app.repaint();
	}
    }
}

Voici l'affichage que cela donne:

Voici des images des huit villes marquées par un point rouge sur la carte ainsi que l'image de la carte.

Paris: 39
Bordeaux: 40
Lyon: 41
Marseille: 42
Toulouse: 43
Nantes: 44
Strasbourg: 45
Lille: 46
France: 47

Complétez l'applet pour que l'image de la ville s'affiche en haut de l'applet quand un mouvement de souris est détecté à proximité du point correspondant sur la carte. Il n'y a qu'une ligne à ajouter.



Barthelemy Francois 2006-03-08