/** FCercle.java tracés graphiques (un cercle)
Fenêtre avec un bouton et un cercle, de dimension prédéfinie
et à un emplacement défini également.
La classe implante les interfaces ActionListener et WindowListener
Adaptation du tracé à la taille de la fenêtre (le tracè, appelé par la
méthode paint(), se fait après avoir demandé les dimensions courantes
de la fenêtre.
Une fenêtre est créée avec une dimension prédéfinie et à un emplacement
défini également, contenant un cercle.
Un bouton permet de faire touner le cercle: dans le réflexe associé au
bouton clic, on appelle la méthode tourner_points avant repaint().
Tracés graphiques de droites et cercle: voir la méthode tracer_fen();
Cette fenêtre est sensible aux événements WindowEvent: elle n'est fermée
qu'à la deuxième demande: voir le champ n_d_fermer
*/
import java.awt.*;
import java.awt.event.*;
public class FCercle extends Frame implements WindowListener, ActionListener {
//Construire une fenêtre
int n_d_fermer; // nombre de demandes de fermeture
Button clic = new Button("clic");
final int nbp=100; // nombre de points pour tracer la boule
double teta0; // angle initial
double ptsX[], ptsY[];
// Construction initiale de la fenêtre
public FCercle() {
BorderLayout gg = new BorderLayout();
setLayout(gg);
setSize(new Dimension(400, 300));
setLocation(100,100);
setTitle("Une fenêtre de 400x300 (FCercle)");
// Recevoir les évènements 'Window'
addWindowListener(this);
// Un bouton
add(clic,"North");
clic.addActionListener(this);
// Les points
teta0=0;
ptsX = new double[nbp];
ptsY = new double[nbp];
}
public void tourner_points() {
int i,j;
double teta, pas = 2 * Math.PI / nbp;
teta0 += Math.PI / 32;
if(teta0 > pas) teta0 -= pas;
for( i=0, teta=teta0; i