import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Image; import java.awt.MediaTracker; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import javax.swing.BorderFactory; import javax.swing.JApplet; import javax.swing.JPanel; import javax.swing.SwingUtilities; import javax.swing.Timer; class IHMDefile extends JPanel implements ActionListener { private static final long serialVersionUID = 1L; private Timer timer; private int pas = 10; private int x; private Image terre, image; private int largeurImage; IHMDefile(Image terre) { this.terre = terre; setBackground(Color.YELLOW); setPreferredSize(new Dimension(400, 150)); timer = new Timer(100, this); timer.start() ; } void construireImage() { String chaine = "Java est un beau langage et son " + "apprentissage est un vrai plaisir"; try { int largeurMonde = terre.getWidth(this); int hauteurMonde = terre.getHeight(this); Font fonte = new Font("TimesRoman",Font.PLAIN, 25); FontMetrics mesure = getFontMetrics(fonte); int hauteurChaine = mesure.getHeight(); int largeurChaine = mesure.stringWidth(chaine); largeurImage = largeurChaine + largeurMonde + 10; System.out.println(largeurImage); int hauteurImage = (hauteurMonde > hauteurChaine ? hauteurMonde : hauteurChaine); int yChaine = (hauteurImage + mesure.getAscent())/2; image = createImage(largeurImage, hauteurImage); Graphics g = image.getGraphics(); g.setColor(Color.YELLOW); g.fillRect(0, 0, largeurImage, hauteurImage); g.drawImage(terre, 0, (hauteurImage - hauteurMonde)/2, this); g.setFont(fonte); g.setColor(Color.RED); g.drawString(chaine, largeurMonde + 10, yChaine); g.dispose(); javax.imageio.ImageIO.write((java.awt.image.BufferedImage)image, "jpeg", new java.io.File("defile.jpg")); } catch (IOException exc) { exc.printStackTrace(); } } public void actionPerformed(ActionEvent e) { x = x - pas; // si l'image est sortie sur la droite, // on la fait repartir de la gauche if (x < -largeurImage) x = getWidth(); repaint(); } public void paintComponent(Graphics g) { super.paintComponent(g); if (image == null) construireImage(); g.drawImage(image, x, 40, this); } } public class DefileA extends JApplet { private static final long serialVersionUID = 1L; public void init() { try { SwingUtilities.invokeAndWait(new Runnable() { public void run() { MediaTracker surveillant = new MediaTracker(DefileA.this); Image terre = getImage(getCodeBase(), "world.gif"); surveillant.addImage(terre, 0); try { surveillant.waitForID(0); } catch(InterruptedException exc) {} IHMDefile ihm = new IHMDefile(terre); ihm.setBorder(BorderFactory.createLineBorder(Color.BLACK)); setLayout(new FlowLayout(FlowLayout.CENTER)); add(ihm); } }); } catch (Exception e) { System.err.println("Impossible de lancer correctement l'applet"); } } }