/** UneBoule.java tracé d'une boule, et rafraichissement
la boule, tracée en rouge et noir, tourne quand on appuie sur un bouton;
elle s'adapte à la taille de la fenêtre.
définition des interfaces WindowListener et ActionListener
fermeture de la fenêtre par l'encadrement ou par un bouton; le traitement
est le même pour les deux types d'événements
(WindowEvent ou ActionEvent): il y a surveillance de le fermeture de la
fenêtre (cf. fermer()).
Une fenêtre, deux boutons et une boule dessinée dans la fenêtre.
Un bouton permet de fermer la fenêtre (fermeture surveillée), et
un autre permet de 'faire tourner' la boule.
Remarquer qu'il n'y a qu'une méthode actionPerformed dans laquelle
on détecte la source de l'événement, donc le bouton qui a été utilisé.
Le rafraichissement est pris en compte par redéfinition de la
méthode: paint(Graphics).
*/
import java.awt.*;
import java.awt.event.*;
/** Une fenêtre est créée avec deux boutons: un pour tracer et un
pour quitter. Cette fenêtre est sensible aux événements
WindowEvent, et ActionEvent; dans cette clasee sont définies
les réflexes à ces événements.
Un cercle est tracé.
*/
public class UneBoule extends Frame
implements WindowListener, ActionListener {
// Un gestionnaire de géométrie, une barre et deux boutons
BorderLayout gg = new BorderLayout();
Panel barre = new Panel(); ;
Button clic = new Button("clic");
Button quit = new Button("quitter");
// Un entier pour surveiller la fermeture effective de la fenêtre
int n_d_fermer;
// Pour tracer la boule on trace des segments entre des points situés
// sur la circonférence de la boule.
// On mémorise les coordonnées dans 2 tableaux.
final int nbp=16; // nombre de points pour la boule
final double rot=2*Math.PI/(5*nbp); // angle de rotation
double teta0; // angle initial
double ptsX[], ptsY[];
/** Création d'une fenêtre contenant un bouton; quand
on ferme cette fenêtre le programme est terminé.
*/
public UneBoule() {
this.setLayout(gg);
setTitle("Une fenêtre de 400x300; coin haut gauche:100x100");
// Panneau supérieur contient 2 boutons
this.add(barre,"North");
barre.add(clic); barre.add(quit);
// Sensibilité aux événements
addWindowListener(this);
clic.addActionListener(this);
quit.addActionListener(this);
// Les points sur la circonférence de la boule
teta0=0;
ptsX = new double[nbp];
ptsY = new double[nbp];
tournerPts();
n_d_fermer=0;
}
/** Fait tourner les points sur la circonférence de la boule (calcul des
nouvelles coordonnées).
*/
public void tournerPts() {
int i,j;
double teta, pas=2*Math.PI/nbp;;
teta0 += rot; if(teta0 > pas+0.00001) teta0 = rot;
for( i=0, teta=teta0; i