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 "