IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Mon premier projet [Débutant(e)]


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 47
    Points : 23
    Points
    23
    Par défaut Mon premier projet
    Bonsoir à tous!
    Je viens par le présent message demander votre aide.
    Je programme un jeu. J'ai réussi à faire la première partie c'est-à-dire sur la console le jeu fonctionne bien. Il me reste à faire la partie interface graphique. Là je suis perdu. Comme c'est mon premier projet, je ne sais pas comment créer mes objets qui sont des billes et un plateau où se déroulera le jeu. Et en plus, je ne sais pas comment faire le lien entre mes classes créées dans la première partie et la partie interface pour pouvoir faire en sorte que les joueurs puissent jouer sur l'interface graphique.
    Je vous remercie d'avance.

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 93
    Points : 127
    Points
    127
    Par défaut
    Bonsoir,

    Connaissez-vous l'existence du design partern MVC ?

    Cela pourrez grandement vous aider.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par Kangourex Voir le message
    Bonsoir,

    Connaissez-vous l'existence du design partern MVC ?

    Cela pourrez grandement vous aider.
    Merci Kangourex pour ton message. Non je ne connais pas l'existence du design patern. Mais pour l'instant ce qui m'importe le plus, c'est de faire le lien entre mes classes créées dans la première partie et la partie interface pour pouvoir faire en sorte que les joueurs puissent jouer sur l'interface graphique, peu importe la forme de ces objets. Pour l'instant, je ne sais pas à quoi vont me servir mes classes que j'ai testées dans la première partie.

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Difficile de te donner une réponse précise sans le code de ta partie console. Sinon, pour les généralités des interfaces graphiques, va regarder les tutoriels (tu as le choix entre différents environnement graphiques : AWT/SWING+Java2D, JavaFX, etc...) :

    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Salut,

    Difficile de te donner une réponse précise sans le code de ta partie console. Sinon, pour les généralités des interfaces graphiques, va regarder les tutoriels (tu as le choix entre différents environnement graphiques : AWT/SWING+Java2D, JavaFX, etc...) :

    Salut,
    Merci Joel.drigo. Je fais d'abord la partie interface graphique. Et puis je reviendrai pour voir comment établir ce lien.

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 93
    Points : 127
    Points
    127
    Par défaut
    Justement le MVC met en relation des données avec la GUI via un contrôleur.

    Sinon si tu veux du pur graphique je t'oriente vers la recherche de moteur de jeu, graphisme. Qui intègre les notions de rectangle, collision, mouvement par vecteur etc.

    Pas besoin de recréer la roue, mais si tu peux fait le mais ça demande pas mal de connaissance.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par Kangourex Voir le message
    Justement le MVC met en relation des données avec la GUI via un contrôleur.

    Sinon si tu veux du pur graphique je t'oriente vers la recherche de moteur de jeu, graphisme. Qui intègre les notions de rectangle, collision, mouvement par vecteur etc.

    Pas besoin de recréer la roue, mais si tu peux fait le mais ça demande pas mal de connaissance.
    Merci Kangourex, je pensais que le MVC ce n'était que pour créer une interface. Je verrai ça aussi

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Bonjour à tous,
    J'ai appris pas mal de choses sur la partie interface graphique. J'ai besoin de votre aide parce que je suis confronté à une difficulté. Vous pouvez remarquer que dans la classe Plateau, j'ai dessiné 32 ovales(cercles) et dans la classe Joeur1, il y a un attribut que j'ai appelé case qui contient des billes.Il y a 32 cases. En fait, les cases ne sont autres que ces ovales(cercles) qui doivent contenir des billes. Mais j'ai du mal à établir un lien entre ces cases et ces ovales(cercles) étant donné que ces ovales, je les ai juste dessinés mais je les ai pas en tant qu'objets. Je veux que chaque ovale désigne chaque case.
    Merci pour vos réponses.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class Joueur1{ 
    static Bille[] case;
    ......
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    import javax.swing.*;
    import java.awt.*;
    import java.awt.image.*;
    //import java.awt.Toolkit;
     
    class Plateau extends JPanel{
     
      public void paintComponent(Graphics g){
           super.paintComponent(g);
           int x=getWidth()/8;
    int y=getHeight()/4;
           System.out.println(x);
           System.out.println(y);
     g.setColor(Color.red);        
     g.fillRect(x,y,getHeight(),getHeight()/2);
     
     for(int j=0;j<4;j++){
     for(int i=0; i<8;i++){   
    g.setColor(Color.white);
    g.fillOval(x,y,70,70);
     
    g.translate(70, 0);
         }
       g.translate(-560,0);
    g.translate(0,70);
     } 
     
    }
    }

  9. #9
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Rien ne t'empêche d'avoir une liste (ou un tableau) des positons de tes ovales dans la classe plateau (par exemple une List<Rectangle>). Mais comme tu les positionnes en dynamique, tu peux aussi bien faire simplement une méthode qui retourne le Rectangle pour une case i,j, en faisant un calcul similaire à celui que tu utilises pour faire le dessin. Tu pourrais également faire le dessin en utilisant cette même méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    protected Rectangle getCase(int i, int j) {
    int x=getWidth()/8;
    int y=getHeight()/4;
    Rectangle rectangle = new Rectangle(x+i*70,y+j*70,70,70);
    // rectangle.translate( i*70, j*70); // ou si tu préfères utiliser les translations...
    return rectangle;
    }
     
    public void paintComponent(Graphics g){
           super.paintComponent(g);
           int x=getWidth()/8;
    int y=getHeight()/4;
           System.out.println(x);
           System.out.println(y);
     g.setColor(Color.red);        
     g.fillRect(x,y,getHeight(),getHeight()/2);
     
     
    g.setColor(Color.white);
     for(int j=0;j<4;j++){
     for(int i=0; i<8;i++){   
    Rectangle oval = getCase(i, j);
    g.fillOval(oval.x,oval.y,oval.width,oval.height); 
         }
     
     }
    Tu peux même représenter directement tes cases par la classe Eclipse2D :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    protected Eclipse2D getCase(int i, int j) {
    int x=getWidth()/8;
    int y=getHeight()/4;
    Eclipse2D oval = new Eclipse2D.Double(x+i*70,y+j*70,70,70);
    // rectangle.translate( i*70, j*70); // ou si tu préfères utiliser les translations...
    return oval ;
    }
     
    public void paintComponent(Graphics g){
           super.paintComponent(g);
           int x=getWidth()/8;
    int y=getHeight()/4;
           System.out.println(x);
           System.out.println(y);
     g.setColor(Color.red);        
     g.fillRect(x,y,getHeight(),getHeight()/2);
     
     
    g.setColor(Color.white);
     for(int j=0;j<4;j++){
     for(int i=0; i<8;i++){   
    Eclipse2D oval = getCase(i, j);
    ((Graphics2D)g).fill(oval); 
         }
     
     }
    Après, tu peux faire une classe à toi qui a une méthode getCase() si tu as besoin d'avoir une approche plus objet de tes cases...

    Par contre dans le code suivant, tu ne peux utiliser le mot case, parce que c'est un mot réservé Java (utilisé dans le switch) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class Joueur1{ 
    static Bille[] case;
    ......
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Bonsoir Joel,
    Merci infiniment.
    Le rectangle c'est celui qui encadre l'ovale?

  11. #11
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par cherche_java Voir le message
    Le rectangle c'est celui qui encadre l'ovale?
    oui
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Merci beaucoup Joel

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Bonjour à tous,
    Si je vous contacte, c'est parce que j'ai besoin de votre aide.

    J'ai une classe Case dans laquelle il y a la méthode getCase qui renvoie un rectangle. Je veux faire en sorte que ces cases réagissent quand je vais cliquer sur elles. Cependant, je rencontre les problèmes que voici:


    1) Je fais class Case extends Rectangle implements MouseListener
    Pour pouvoir convertir mes rectangles en case. Malheureusement, je ne peux pas utiliser la méthode addMouseListener sur les objets Case car la classe Case ne dérive pas par exemple de Jpanel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Case extends Rectangle implements MouseListener{
     
    protected static Rectangle getCase(int i, int j) {
    int x=getWidth()/8;
    int y=getHeight()/4;
    Rectangle rectangle = new Rectangle(x+i*70,y+j*70,70,70);
    // rectangle.translate( i*70, j*70);  
    return rectangle;
    }
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    import javax.swing.*;
    import java.awt.*;
    import java.awt.image.*;
     
    class Plateau extends JPanel{
    static    Image image;  
     
    public void paintComponent(Graphics g){
           super.paintComponent(g);
           int x=getWidth()/8;
    int y=getHeight()/4;
     System.out.println(x);
         System.out.println(y);
     g.setColor(Color.red);        
     g.fillRect(x,y,getHeight()-225,getHeight()/2-110);
     
     for(int j=0;j<4;j++){
     for(int i=0; i<8;i++){   
    g.setColor(Color.white);
    Rectangle oval=Case.getCase(i, j);
    g.fillOval(oval.getX(), oval.getY(),70,70); 
    g.translate(70, 0);
         }
       g.translate(-560,0);
    g.translate(0,70);
     } 
     ImageIcon imageIcon = new ImageIcon("index.png");
      image = imageIcon.getImage();
     
     System.out.println(image.getWidth(null));
     System.out.println(image.getHeight(null));
     
     for(int i=0; i<4;i++){
         for(int j=0;j<8;j++){
    g.drawImage(image,165,90,null);
    g.drawImage(image,190,90,null);
    g.translate(70,0);
         }
         g.translate(-560,0);
         g.translate(0,-70);
     
     
     }
       }
    }

    2) Je fais class Case extends Jpanel implements MouseListener

    Cette fois-ci, j'ai la possibilité d'utiliser la méthode addMouseListener sur les objets Case, mais le problème qui se pose c'est que mes objets sont des rectangles et je ne peux pas les convertir en objets Case car je ne peux plus faire class Case extends Rectangle puisque Java n'admet pas l'héritage multiple.

    3) Pour contourner ces difficultés, j'ai eu l'idée de créer une nouvelle classe class CaseOvale extends Case dont le constructeur est CaseOvale dans lequel je crée un objet Rectangle. J'arrive à contourner les ces difficultés mais pas trop sûr de la démarche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    class CaseOvale extends Case{
    int posX;
    int posY;
    int longueur;
    int largeur;
    Rectangle rectangle;
     
    public CaseOvale( int posX, int posY, int largeur, int longueur){
     
      this.posX=posX;
    this.posY=posY;
    this.largeur=largeur;
    this.longueur=longueur;
    rectangle= new Rectangle(this.posX, this.posY, this.largeur, this.longueur);
    }
    public static CaseOvale getCaseOvale(int i, int j){
    int x=getWidth()/8;
    int y=getHeight()/4;
     
    CaseOvale case_ovale=new CaseOvale(x+70*i, x+70*j, 70, 70);
     
    return case_ovale;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
     
    public class Case extends JPanel implements MouseListener {
     
      public static Case getCase(int i, int j){
     
         Case case_click=(Case)CaseOvale.getCaseOvale(i,j);
         case_click.addMouseListener(new EcouteurClic());
         return case_click;
         }
    }
    Merci d'avance pour votre aide.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Bonjour à tous,
    J'ai besoin de votre aide. Je pense que le problème se situe dans la classe Fenetre, ligne 19 jusqu'à 22. quand j'affiche ma fenetre, il apparait des petits carrés en dehors de mon plateau. Quand je clique sur ces petits carrés alignés, il y a une réponse. Mais quand je clique sur mes ovales qui sont dans mon plateau, il n'y a aucune réponse.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    import javax.swing.*;
    import java.awt.*;
     
    class Fenetre extends JFrame{
        static Container contenu;
        Plateau pla=new Plateau();
     
        public Fenetre(){
     
    	pla.x=getWidth();
    	pla.y=getHeight();    
        setTitle("JEU");
        setSize(1360,1200);
         contenu=getContentPane();
     
        pla.setBackground(Color.cyan);
        contenu.add(pla);
         for(int j=0; j<8; j++){
     
        	for(int i=0;i<4;i++){
        	    pla.add(Case.getCase(i,j));
        		}
         }
        }    
     
    public static void main(String[] args){
        Fenetre fen =new Fenetre();
        fen.setVisible(true);
       fen.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    }
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
     
    public class Case extends JPanel {
        int nombre_bille;
        // static int numero_case;
        Rectangle rectangle;    
        int posX;
        int posY;
        // public  int x;
        //public  int y;
        // static Case[][] casa=new Case[4][32];
     
     
     
     
         public Case(int posX, int posY){
    	 this.posX=posX;
    	 this.posY=posY;
    	 rectangle=new Rectangle(this.posX, this.posY, 70, 70);
    	 addMouseListener(new EcouteurClic());	
     
        }
     
       public Case(int nombre_bille){
    	this.nombre_bille=nombre_bille;
        }
     
        public static Case getCase(int i, int j){
    	 Case  cse =new Case(Plateau.x+70*i,Plateau.y+70*j);
    	 return cse;
        }
     
     
      int getnombre_bille(){
     
     
    	return nombre_bille;
        }
     
        void setnombre_bille(int n){
    	nombre_bille=n;
        }
     
     
      void tableau_case(int[][] tab){
          for(int i=0; i<8; i++){
    	  int[] c =new int[7]; 	  
    for(int j=0; j<8; j++){
    	  c[j]=tab[i][j];
    	  //int[] case=c;
    }
          }
      }
     
     
        public static void main(String [] args){
     
    	}
    }


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.image.*;
     
    class Plateau extends JPanel{
    static    Image image;  
        public static int x;
    public static int y;
        static  Case [][] tab=new Case[4][8];
        static  Case [][] casa=new Case[4][32];
        //Bille bille=new Bille(image);
     
     
     public void paintComponent(Graphics g){
           super.paintComponent(g);
            x=getWidth()/8;
     y=getHeight()/4-52;
     System.out.println("taille"+x);
         System.out.println(y);
     g.setColor(Color.red);        
     g.fillRect(x,y,getHeight()-216,getHeight()/2-108);
     
     for(int j=0;j<4;j++){
     for(int i=0; i<8;i++){   
    g.setColor(Color.white);
    Case oval=Case.getCase(i,j);
     
    System.out.println("posX"+oval.posX);
    System.out.println("posY"+oval.posY);
    g.fillOval(oval.posX-70*i, oval.posY-70*j,70,70); 
     
    g.translate(70, 0);
     
         }
      g.translate(-560,0);
     g.translate(0,70);
     } 
     ImageIcon imageIcon = new ImageIcon("index.png");
      image = imageIcon.getImage();
     //Toolkit toolkit = Toolkit.getDefaultToolkit();
     //Image  image=toolkit.getImage("Bille.jpg"); 
     System.out.println(image.getWidth(null));
     System.out.println(image.getHeight(null));
     
     for(int i=0; i<4;i++){
         for(int j=0;j<8;j++){
    g.drawImage(image,165,90,null);
    g.drawImage(image,190,90,null);
    g.translate(70,0);
         }
         g.translate(-560,0);
         g.translate(0,-70);
     
     }
       }
     
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
     
    public class EcouteurClic implements MouseListener{
     int positionX;
        int positionY;
        //Fenetre fna=new Fenetre();
        //int x=fna.getWidth()/8;
        //int y=fna.getHeight()/4-52;
     
     
    public void mouseClicked(MouseEvent ev){
     
     	positionX=ev.getX();
    	positionY=ev.getY();
    	System.out.println("position x"+positionX);
    System.out.println("position y"+positionY);
    for(int i=1;i<=8;i++){
    	    for(int j=1; j<=4;j++){
    		if((Plateau.x*i<positionX)&&(positionX<Plateau.x*i+70)){
    		    if((Plateau.y*j<positionY)&&(positionY<Plateau.y*j+70)){
    			Case case_click=Case.getCase(i,j);
    			System.out.println("ecouteur clic"+"("+i+","+j+")");		    
    // A COMPLETER		    
    }
     
    		}
    	    }
    	}
    }
     
     
        public void mouseReleased(MouseEvent ev){}
        public void mouseEntered(MouseEvent ev){}
         public void mouseExited(MouseEvent ev){}
        public void mousePressed(MouseEvent ev){}
     
     
     
     
     
     
     
    }
    Merci d'avance pour votre aide.

  15. #15
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Je ne sais pas où commencer : c'est un peu partout qu'il y a des problèmes, aussi bien dans la structure, dans l'organisation et dans la portée des variables.

    Pour ton problème de réaction à la souris, tu enregistres un écouteur de souris sur chaque Case : normal que tu ne puisses cliquer que les cases, et pas autre chose.

    Comme je ne sais pas exactement ce que tu veux afficher, je ne peux pas te dire où est exactement le problème. Le fait que tu mélanges dessin direct dans le contexte graphique, composants layoutés, translations et positionnement absolu y contribue probablement. Même pour moi qui suit relativement habitué à manipuler ces notions, il y'a de quoi choper un mal de crâne carabiné.

    Sinon, Plateau est un panel, qui a un FlowLayout centré par défaut : tous les panels Case que tu ajoutes à Plateau sont donc layoutés selon un FlowLayout. Donc normal qu'il s'affiche en haut/centré lorsque la frame est étendu à l'écran : si tu réduis la fenêtre en largeur, tu vas voir la ligne de case passer à la ligne et s'afficher sur plusieurs lignes.

    A part ça, tout est mélangé dans ton code (par exemple, tu as une classe Plateau, mais tu gères l'ajout des cases du plateau dans la classe Fenêtre, mais la création est faite dans la classe Case : c'est hypér compliqué et ça ne t'aide pas faire marcher ton programme (bien au contraire). ça t'oblige par exemple à faire des trucs emberlificotés et imbitables comme :

    Dans Fenetre : de prendre la taille de la fenêtre (et ce avant de lui donner une taille, donc ça vaut 0,0)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	   pla.x=getWidth();
    	pla.y=getHeight();
    En plus tu l'appelles x et y, au lieu de width et height, histoire de bien t'embrouiller encore plus.

    Puis dans case, tu écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Case  cse =new Case(Plateau.x+70*i,Plateau.y+70*j);
    Donc la position de la case dépend de ces 2 variables : heureusement que finalement tu avais 0,0 dans x et y !

    Il y a plein de chose comme ça.

    Réorganise ton code de manière à avoir des classes séparées qui s'occupent de ce qu'elles ont à faire, et pas de ce que les autres on a faire.

    Par exemple, la classe Fenetre s'occupe de se paramétrer elle-même, et d'affiche le Plateau : les cases font partie du plateau, c'est dans le plateau qu'on doit les gérer. Pour simplifier on y met aussi la méthode de lancement du programme qui ouvre la fenêtre principale et l'affiche, mais aurait pu faire une classe spéciale pour ça, par exemple Lanceur, ou Programme, ou portant le nom de ton jeu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public class Fenetre extends JFrame {
     
    	public Fenetre() {
     
    		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
     
    		setTitle("JEU");
    		setSize(Toolkit.getDefaultToolkit().getScreenSize()); // mise à la taille de l'écran (quelque soit sa taille)
     
    		// création du plateau et ajout dans le content pane 
    		add(new Plateau());
     
    	}
     
    	public static void main(String[] args) {
    		Fenetre fen = new Fenetre();
    		fen.setVisible(true);
    	}
     
    }
    Ensuite dans la classe plateau, tu as 2 tableaux, tab et casa : remplis les simplement de cases. Ne cherche pas à faire dépendre tes cases de la position du plateau, ou d'autre chose. Ensuite, je te conseille de choisir :

    [LIST][*]Soit du layout - Dans ce cas, les cases sont des JPanels. Pas besoin d'avoir un Rectangle, un JPanel c'est déjà un rectangle (qu'on peut obtenir par getBounds()). Le plus compliqué est de trouver les layout manager qui conviennent à ta présentation (ou de s'en faire soi-même, ce qui est vraiment complexe pour un débutant)[*]Soit pas de layout et du positionnement et dimensionnement absolu - Dans ce cas les cases sont aussi des JPanel. Tu devras
    • Soit t'adapter aux changements de taille du Plateau (en l'écoutant avec ComponentListener)
    • Soit avoir une fenêtre qui ne change pas de taille, ou un Plateau qui ne change pas de taille et qui ne prend pas tout l'espace de la frame, et donc avoir des positions et tailles de cases calculable dès la construction de plateau. Un écouteur sur chaque case, et tu pourras savoir quelle case est cliquée et quand.
    • Soit du dessin direct dans Graphics (pour les jeux, cette option est souvent la meilleure, parce qu'on est plus libre pour le rendu) - ça t'oblige à tout calculer toi-même : taille, position, et déterminer sur quelle case la souris se trouve quand on clique. Tu n'as plus besoin qu'une case soit un JPanel ; tu n'est pas obligé que les cases aient un rectangle pour stocker les tailles et positions mais ça peut simplifier le traitement du dessin et de la souris, ainsi qu'accélérer le dessin.


    De même, ne mélange pas positionnement absolut lorsque tu dessines et translation : ça complique toute la compréhension et c'est moins facile de comprendre où est vraiment dessiner un truc.

    Quand tu auras réussi à faire fonctionner chaque mode séparément, tu pourras t'essayer à les mélanger.

    Par exemple, on mode purement graphique, je défini une classe Case qui n'a qu'une forme (ici je prends former plutôt que rectangle, parce que je n'ai pas que des rectangles, mais aussi des ovales, et ça va me faciliter la tâche)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public class Case {
     
    	private Shape shape;
     
    	public Case() {
    		 this.shape=new Rectangle(); // on s'arrange pour qu'il y ait toujours un rectangle, ce qui évite le risque de NullPointerException
    	}
     
    	public void setShape(Shape shape) {
    		if ( shape==null ) {
    			 this.shape=new Rectangle(); // on s'arrange pour qu'il y ait toujours un rectangle, ce qui évite le risque de NullPointerException
    		}
    		else {
    			this.shape=shape;
    		}
    	}
     
    	public Shape getShape() {
    		return shape;
    	}
     
    }
    Tout simplement.

    Regarde dans Plaeteau comment j'ai séparé un maximum pour que ça soit plus clair locale : chaque méthode fait son propre traitement à part, on a plus besoin de penser globalement à toutes les interactions. En plus j'utilise des constantes, ce qui fait qu'une valeur n'est qu'à un seul endroit : si je veux la changer, je n'ai juste qu'à la changer à cet endroit. Dès lors qu'une valeur est utilisé à plus d'un endroit et qu'elle signifie la même chose à tous ces endroits, il est temps de se demander si on ne devrait pas faire une constante (static final) (et la réponse est quasiment toujours "oui").

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    public class Plateau extends JPanel {
     
    	// pour les cases ovales
    	public static final float DEBUT_OVAL_X = 0.2f; // il s'agit de l'offset - on travaille tout en relatif (pourcentage), pour pouvoir s'adapter à une taille de plateau qui change (ici 20%) 
    	public static final float DEBUT_OVAL_Y = 0.2f; // il s'agit de l'offset
    	public static final float ESPACE_OVAL_X = 0.05f; // on va utiliser ça pour définir un espacement entre chaque case
    	public static final float ESPACE_OVAL_Y = 0.05f; // on va utiliser ça pour définir un espacement entre chaque case
     
    	// pour les cases carrées
    	public static final float DEBUT_CARRE_X = 0.1f; // il s'agit de l'offset
    	public static final float DEBUT_CARRE_Y = 0.1f; // il s'agit de l'offset
    	public static final float ESPACE_CARRE_X = 0.1f; // on va utiliser ça pour définir un espacement entre chaque case
    	public static final float ESPACE_CARRE_Y = 0.1f; // on va utiliser ça pour définir un espacement entre chaque case
     
    	// pour le rectangle rouge, la base est les carrés
    	public static final float DEBUT_RECTANGLE_X = DEBUT_CARRE_X;
    	public static final float DEBUT_RECTANGLE_Y = DEBUT_CARRE_Y;
     
    	private Case[][] tabCaseOval = new Case[4][8];
    	private Case[][] tabCaseCarre = new Case[4][32];
     
    	public Plateau() {
     
    		setBackground(Color.CYAN);
     
    		// rempli les tableaux :
    		remplirTableau(tabCaseOval); // j'utilise une méthode parce que j'ai 2 tableaux mais aussi parce que ça évite d'avoir trop de chose dans la même méthode ou constructeur
    		remplirTableau(tabCaseCarre); 
     
    		addComponentListener(new ComponentAdapter() {
    			@Override
    			public void componentResized(ComponentEvent e) {
    				// Cet événement réagit au changement de taille du Plateau
    				calculerFormes(tabCaseOval, DEBUT_OVAL_X, DEBUT_OVAL_Y, ESPACE_OVAL_X, ESPACE_OVAL_Y); // je calcule les positions des rectangles correspondant (j'utilise des constantes comme ça je peux modifier ces valeurs à un seul endroit sans revenir dans le code)
    				calculerFormes(tabCaseCarre, DEBUT_CARRE_X, DEBUT_CARRE_Y, ESPACE_CARRE_X, ESPACE_CARRE_Y); 
    				repaint(); // on a changer la taille des rectangles, il faut redessiner
    			}
    		});
     
    		addMouseListener(new MouseAdapter() {
    			@Override
    			public void mouseClicked(MouseEvent e) {
    				clicCase(e.getX(), e.getY()); // on cherche la case cliquée
    			}
    		});
     
    	}
     
    	private void remplirTableau(Case[][] tabCase) {
    		for(int i=0; i<tabCase.length; i++) {
    			for(int j=0; j<tabCase[i].length; j++) {
    				tabCase[i][j]=new Case();
    			}
    		}
    	}
     
    	private void calculerFormes(Case[][] tabCase, float debutx,
    			float debuty, float espacex, float espacey) {
     
    		// quelle est la taille du plateau		
    		double width = getWidth();
    		double height = getHeight();
     
    		// on calcul les pourcentages pour les offset
    		double offsetx = width * debutx;
    		double offsety = height * debuty;
     
    		// quelle est la taille du plateau dans lequel on va dessiner : les offset debutx et debuty servent de marges
    		width = width - offsetx - offsetx;
    		height = height - offsety - offsety;
     
    		// combien de cases en hauteur
    		int nbHeight = tabCase.length;
    		// combien de cases en largeur
    		int nbWidth = tabCase[0].length;
     
    		// la largeur width est égale au nombre de case en largeur x la largeur d'une case + le nombre d'espaces entre chaque case * l'espacement entre case
    		// le nombre d'espaces entre chaque case et le nombre de case moins un
    		// width = nbWidth * caseWidth + (nbWidth-1) * espaceWidth
    		// on définit l'espace ici comme un % de la largeur de case :
    		// width = nbWidth * caseWidth + (nbWidth-1) * caseWidth * espaceX 
    		// autrement écrit : width = caseWidth * ( nbWidth + ( nbWidth - 1 ) * espacex ))
    		// donc caseWidth = width / ( nbWidth + ( nbWidth - 1 ) * espacex ))
     
    		double caseWidth = width / ( nbWidth + (nbWidth-1) * espacex); 
    		// pareil pour la hauteur
    		double caseHeight = height/ ( nbHeight + (nbHeight -1) * espacey); 
     
    		// maintenant on peut calculer les rectangles correspondant au case :
    		double y = offsety; 
    		for(int i=0; i<tabCase.length; i++) {
    			double x = offsetx;
    			for(int j=0; j<tabCase[i].length; j++) {
    				Shape shape; // on détermine la forme
    				if ( tabCase == tabCaseOval ) { // table d'ovales...
    					shape = new Ellipse2D.Double(x, y, caseWidth, caseHeight); // la forme est un ovale
    				}
    				else { // sinon 
    					shape = new Rectangle((int)x, (int)y, (int)caseWidth, (int)caseHeight); // c'est un rectangle
    				}
    				tabCase[i][j].setShape(shape);
    				x += caseWidth; // on avance d'une largeur de case
    				x += caseWidth * espacex; // on avance de l'espace entre case
    			}
    			y += caseHeight; // on avance d'une hauteur de case
    			y += caseHeight * espacey; // on avance de l'esapce entre case
    		}
     
    	}
     
    	@Override
    	protected void paintComponent(Graphics g) {
    		super.paintComponent(g);
     
    		// quelle est la taille du plateau		
    		double width = getWidth();
    		double height = getHeight();
     
    		// on calcul les pourcentages pour les offset
    		double offsetx = width * DEBUT_RECTANGLE_X;
    		double offsety = height * DEBUT_RECTANGLE_Y;
     
    		// on dessine le fond qu'on a envie
    		g.setColor(Color.RED);
    		g.fillRect((int)offsetx, (int)offsety, (int)(getWidth() - offsetx*2), (int)(getHeight() - offsety*2));
     
    		// puisqu'on a calculer les rectangles dans calculerRectangles, il nous suffit de les utiliser pour dessiner au bon endroit
    		g.setColor(Color.MAGENTA);
    		dessineTableau(g, tabCaseCarre);
     
    		g.setColor(Color.WHITE);
    		dessineTableau(g, tabCaseOval);
     
    	}
     
    	private void dessineTableau(Graphics g, Case[][] tabCase) {
    		for(int i=0; i<tabCase.length; i++) {
    			for(int j=0; j<tabCase[i].length; j++) {
    				((Graphics2D)g).fill(tabCase[i][j].getShape());  
    			} 
    		}
    	}
     
    	private void clicCase(int mouseX, int mouseY) {
     
    		if ( !clicCase(mouseX, mouseY, tabCaseOval) ) { // un clic sur un oval est prioritaire
    			if( !clicCase(mouseX, mouseY, tabCaseCarre) ) {
    				clicHorsCase(mouseX, mouseY);
    			}
    		}
     
    	}
     
    	private void clicHorsCase(int x, int y) {
    		// on passe ici si on a cliqué sur aucune case
    		System.out.println("Cliquer en dehors des cases");
     
    		// ici on même déterminer encore si on est dans le rectangle rouge ou pas
    		// quelle est la taille du plateau		
    		double width = getWidth();
    		double height = getHeight();
     
    		// on calcul les pourcentages pour les offset
    		double offsetx = width * DEBUT_RECTANGLE_X;
    		double offsety = height * DEBUT_RECTANGLE_Y;
     
    		if ( new Rectangle2D.Double(offsetx, offsety, width-offsetx-offsetx, height-offsety-offsety).contains(x, y ) ) {
    			System.out.println("Clic dans le rectangle rouge");
    		}
    		else {
    			System.out.println("Clic en dehors du rectangle rouge");
    		}
     
    	}
     
    	private boolean clicCase(int x, int y, Case[][] tabCase) {
    		for(int i=0; i<tabCase.length; i++) {
    			for(int j=0; j<tabCase[i].length; j++) {
    				if ( tabCase[i][j].getShape().contains(x, y) ) {
    					// si le point de la souris est dans le rectangle
    					if ( tabCase == tabCaseOval ) {
    						clicCaseOval(i, j, tabCase[i][j]);
    					}
    					else {
    						clicCaseCarre(i, j, tabCase[i][j]);
    					}
    					return true; // on a trouvé une case qui correspond
    				}
    			} 
    		}
    		return false; // on a trouvé aucune case
    	}
     
    	private void clicCaseOval(int i, int j, Case caseOval) {
    		// on passe par ici si on a cliqué sur case ovale
    		System.out.println("Clic sur la case ovale (" + i + ", " + j + ")");
    	} 
     
    	private void clicCaseCarre(int i, int j, Case caseCarre) {
    		// on passe par ici si on a cliqué sur case carrée
    		System.out.println("Clic sur la case carrée (" + i + ", " + j + ")");
    	} 
     
    }
    et pour l'afficher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public class Fenetre extends JFrame {
     
    	public Fenetre() {
     
    		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
     
    		setTitle("JEU");
    		setSize(Toolkit.getDefaultToolkit().getScreenSize()); // mise à la taille de l'écran (quelque soit sa taille)
     
    		// création du plateau et ajout dans le content pane 
     
    		add(new Plateau());
     
    	}
     
    	public static void main(String[] args) {
    		Fenetre fen = new Fenetre();
    		fen.setVisible(true);
    	}
     
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Bonjour Joël,
    les mots me manquent pour te remercier. Merci pour ton temps que tu consacres pour nous aider. Merci pour ton sens de partage. Merci pour tes remarques pertinentes qui me permettront sans nul doute d'avancer. Merci aussi à tous ceux qui œuvrent de près ou de loin pour que ce site aille de l'avant. Sans vous, je n'aurais pas progressé en java. J'ai tout appris ici. Java est mon premier langage de programmation.

    Tu touches exactement les points qui m'ont causé des difficultés à savoir la portée des variables qui elle même est due, sans doute, à un problème de structure et d' organisation du code.
    quand je fais par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Case  cse =new Case(Plateau.x+70*i,Plateau.y+70*j);
    C'est difficile d'aller chercher les valeurs des champs x et y de la classe Plateau. J'ai même eu l'idée de définir ces cases dans la classe Plateau en créant un tableau. Mais je ne suis pas allé au bout de cette idée. Les mêmes difficultés m'ont poussé à mettre l'écouteur dans la case et d'ajouter ces objets écoutés dans la fenêtre.

    Je vais essayer de réorganiser mon code en suivant tes conseils et tes remarques.

    Merci une fois de plus.

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/04/2008, 14h58
  2. Mon premier projet en C++
    Par oranocha dans le forum C++
    Réponses: 4
    Dernier message: 05/03/2008, 14h14
  3. Besoin d'aide pour guider mon premier projet
    Par FabaCoeur dans le forum Débuter avec Java
    Réponses: 16
    Dernier message: 03/12/2007, 09h09
  4. Mon premier projet GWT
    Par gufra dans le forum GWT et Vaadin
    Réponses: 1
    Dernier message: 07/11/2007, 13h20
  5. [ affichage contacts ] Mon premier projet GWT
    Par hocinema dans le forum GWT et Vaadin
    Réponses: 5
    Dernier message: 26/08/2007, 21h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo