PYL: c oct 05
(Lagrée P.-Y.),
LMM-Univ PARIS 6, B 162,
4 place Jussieu, 75252 PARIS
pyl(a)ccr.jussieu.fr
http://www.lmm.jussieu.fr/~lagree
Exemple de gui [Graphic User Interface] pour lancé de dé
Un programme minimal en java. On crée un bouton qui "lance" un
dé. On affiche le résultat.
le lancé de dé lui même est fait par utilisation de la fonction
"random" de la librairie mathématique (Math.random())). Le nombre obtenu
est compris entre 0 et 0.99999, on le multiplie par 6, et on rajoute
1. On a un nombre entre 1 et 6.99999999, ensuite on prend la partie
entière (par exemple la partie entière de 1.232 est 1; la partie
entière de 5.323455 est 5).
La transcription (transtypage) est faite par "int". Le résultat est un
entier:
int de=(int)(1+6*Math.random());
Le lancer de dé est dans un sous programme:
public void actionPerformed(ActionEvent e) {
Object src = e.getSource(); //action
if (src == de1) { //resultat mis dans res1
int de=(int)(1+6*Math.random());
res1.setText("" + de);
return; }
if (src == de2) { //resultat mis dans res1
int de=(int)(1+6*Math.random());
res2.setText("" + de);
return; }
le résultat du dé est mis dans "res1" qui est un champ de texte qui a
été initialisé à "Rien" ou dans "res2" si
c'est le bouton 2 qui a été pressé..
Quand une action est produite, car les actions sont attendues par
implements ActionListener
on récupère ce qu'est cette
action par Object src = e.getSource();
puis on fait un test
pour savoir s'il s'agit de la bonne action
if (src == de1) ou if (src == de2) ou if (src == arb)
En effet, l'action attendue est le clic sur
le bouton "de1", mais il y a continuellement des actions (déplacement de
souris, clics ailleurs etc.).
L'action arbitre permet au travers d'un test simple de déterminer aui a
gagné en relisant le résultat
double z1 =Double.parseDouble(res1.getText());
double z2 =Double.parseDouble(res2.getText());
le test est ensuite fait, son résultat est mis dans le troisème
champ de texte:
if(z1>z2){res.setText("1 gagne");}
if(z1 \< z2){res.setText("2 gagne");}
if(z1== z2){res.setText("egal");}
Les initialisation du bouton action et du champ de résultat:
public class deguiguy2 extends Applet implements ActionListener {
Panel controlPanel; //definition du panneau
JButton de1 = new JButton("lance! 1"); //definition du Bouton
JButton de2 = new JButton("lance! 2"); //definition du Bouton
JButton arb = new JButton("arbitre"); //definition du Bouton
JTextField res1= new JTextField ("Rien"); //definition du champ de resultat du lance
JTextField res2= new JTextField ("Rien"); //definition du champ de resultat du lance
JTextField res = new JTextField ("Rien "); //definition du champ de resultat du lance
public void init() { //initialisation
controlPanel = new Panel(); //creation du panneau
add("Center", controlPanel); //disposition
controlPanel.add(de1); //ajout du bouton
de1.addActionListener(this); //surveiller le bouton
controlPanel.add(de2); //ajout du bouton
de2.addActionListener(this); //surveiller le bouton
controlPanel.add(arb); //ajout du bouton
arb.addActionListener(this); //surveiller le bouton
controlPanel.add(res1); //ajout du resultat
controlPanel.add(res2); //ajout du resultat
controlPanel.add(res ); //ajout du resultat
}
On ajoute aussi un "principal" qui ne sert pas si on lance l'appliquette
par le butineur.
public static void main(String args[]) {
JFrame f = new JFrame("jeu de dé par PYL");
deguiguy2 guide = new deguiguy2();
guide.init();
f.getContentPane().add(guide);
f.setSize(500,100);
f.show();
}
La source
est à sauver dans le fichier
deguiguy2.java, on compile avec la ligne de commande par "javac
deguiguy2.java ;java deguiguy2 "