Animation dans un jpanel + surveillance de la souris et du clavier

Description

Un mini-jeu "ClickOnTheYellowSquare" qui montre comment faire une petite animation 2D avec un JPanel (+ comment dessiner des éléments). La source montre aussi comment utiliser le MouseEvent et le MouseListener : le jeu va compter le nombre de clics effectués à gauche, à droite et sur le carré jaune.
Un carré rouge est dessiné au centre de la moitié gauche et un rond bleu est dessiné au centre de la moitié droite. Une ligne est tracée à la moitié pour séparer les 2.

De plus, une classe "EcouteClavier" va écouter le clavier et sitôt que le "mot magique" est tapé (ici, 'javafr'), une Jdialog s'ouvre en affichant un message.

J'ai codé cette source pour moi-même apprendre comment utiliser l'objet Graphic et Graphic2D.

Dans la classe Panneau, on peut ajouter des Carre.
Attention, si vous mettez beaucoup de carrés, cela risque de "lagger", d'avoir des ralentissements.

Source / Exemple :


package jeu;

import java.util.ArrayList;
import javax.swing.JFrame;

public class Fenetre extends JFrame {

Panneau pan = new Panneau();

     public Fenetre(int longueur, int largeur){

         this.setTitle("Click On The Yellow Square");
         this.setSize(longueur, largeur);
         // se positionne au centre
         this.setLocationRelativeTo(null);
         // Ferme-toi lorsqu'on clique sur "Fermer" !
         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

         //On prévient notre JFrame que ce sera notre JPanel qui sera son contentPane

         this.setContentPane(pan);

         addKeyListener(new EcouteClavier());
         // this.setAlwaysOnTop(true);

         
        this.pack();

        this.setDefaultLookAndFeelDecorated(true);
        this.setExtendedState(this.MAXIMIZED_BOTH);

         this.setVisible(true);

         go();
     }

        private void go(){

                ArrayList list = pan.getListeCarres();
                Object[] tmp = list.toArray();

               while(true){
                        for(int i=0;i<tmp.length;i++)
                        {
                            Carre c = (Carre) tmp[i];

                            int x = c.getPosX(), y = c.getPosY();
                        //Si la coordonnée x est inférieure à 1, on avance
                        if(x < 1)  c.setBackX(false);
                        //Si la coordonnée x est supérieure à la taille du Panneau
                        //moins la taille du carre, on recule
                        if(x > pan.getWidth()- c.getLargeur()) c.setBackX(true);

                        //idem pour l'axe Y
                        if(y < 1) c.setBackY(false);
                        if(y > pan.getHeight()-c.getHauteur()) c.setBackY(true);

                        //Si on avance, on incrémente la coordonnée
                        if(!c.getBackX())
                                c.setPosX(++x);
                        //Sinon, on décrémente
                        else
                                c.setPosX(--x);

                        //Idem pour l'axe Y
                        if(!c.getBackY())
                                c.setPosY(++y);
                        else
                                c.setPosY(--y);

                        } // fin du for

                    
                     try {
                                Thread.sleep(15);
                     } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                     }

                        //On redessine notre Panneau
                     pan.repaint();
                 } // fin du while 
        }
}

Conclusion :


Une petite source assez bête mais qui montre une utilisation simple des Graphic, Graphic2D, MouseListener et KeyListener.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.