105 lines
3.3 KiB
Java
105 lines
3.3 KiB
Java
package linea;
|
|
|
|
import java.awt.BorderLayout;
|
|
import java.awt.Color;
|
|
import java.awt.Dimension;
|
|
import java.awt.Graphics;
|
|
import java.awt.Graphics2D;
|
|
import java.awt.RenderingHints;
|
|
import java.util.ArrayList;
|
|
|
|
import javax.swing.JPanel;
|
|
|
|
public class ZoneDessin extends JPanel { // hérite d'une classe du frameWork standard
|
|
|
|
private static final long serialVersionUID = 1L;
|
|
|
|
protected ArrayList<ObjetGraphique> listeObjets = new ArrayList<ObjetGraphique>();
|
|
|
|
//-------------------------------------------------------------------------
|
|
// PROPRIETES
|
|
//-------------------------------------------------------------------------
|
|
|
|
// un booleen qui permet d'arreter l'animation (suspendre)
|
|
protected boolean estArrete = false;
|
|
|
|
|
|
//-------------------------------------------------------------------------
|
|
// METHODES
|
|
//-------------------------------------------------------------------------
|
|
|
|
//-------------------------------------------------------------------------
|
|
// Constructeur de la classe
|
|
//-------------------------------------------------------------------------
|
|
public ZoneDessin(){
|
|
// on prépare la zone d'affichage
|
|
setLayout(new BorderLayout());
|
|
setPreferredSize(new Dimension(800, 600));
|
|
setBackground(new Color(220,170,0));
|
|
}
|
|
|
|
|
|
//-------------------------------------------------------------------------
|
|
// Ajout d'un objet graphique à la zonde de dessin
|
|
//-------------------------------------------------------------------------
|
|
public void ajouterObjet(ObjetGraphique unObjet) {
|
|
this.listeObjets.add(unObjet);
|
|
}
|
|
|
|
|
|
//-------------------------------------------------------------------------
|
|
// Mettre en pause et redémarrer
|
|
//-------------------------------------------------------------------------
|
|
public void arreter(){
|
|
estArrete = true;
|
|
}
|
|
|
|
public void demarrer(){
|
|
estArrete = false;
|
|
}
|
|
|
|
|
|
//-------------------------------------------------------------------------
|
|
// Boucle d'animation :
|
|
// - appelée par exemple 25 fois par seconde
|
|
// - à chaque appel :
|
|
// - on anime (déplace) chaque objet
|
|
// - on redessine tout : appel à paintComponent, déclenché par repaint
|
|
//-------------------------------------------------------------------------
|
|
public void traiterBoucleAnimation(){
|
|
if (estArrete==true) {
|
|
return;
|
|
}
|
|
|
|
// 1. on déplace chaque objet graphique
|
|
// A FAIRE : décommenter lorsque cela devienda exécutable, et compléter
|
|
|
|
for (ObjetGraphique obj : listeObjets){
|
|
obj.Animer();
|
|
}
|
|
// 2. on demande à redessiner, ce qui déclenchera automatiquement
|
|
// l'appel à la méthode paintComponent, qui est ci-dessous
|
|
repaint();
|
|
}
|
|
|
|
|
|
//-------------------------------------------------------------------------
|
|
// Dessin, déclenché par le repaint() de la méthode ci-dessus
|
|
//-------------------------------------------------------------------------
|
|
public void paintComponent(Graphics g) {
|
|
// On demande à la super-classe (JPanel) de se redessiner
|
|
super.paintComponent(g);
|
|
// Puis on ajoute ce qui est spécifique à la classe
|
|
// on indique qu'il faut de l'antialiasing
|
|
Graphics2D g2D = (Graphics2D) g;
|
|
g2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
|
|
for (ObjetGraphique obj : listeObjets){
|
|
obj.Afficher(g);
|
|
}
|
|
// à compléter
|
|
}
|
|
|
|
}
|
|
|
|
|