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

Interfaces Graphiques en Java Discussion :

ameliorer un peu mon code


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 76
    Par défaut ameliorer un peu mon code
    Bonjour tout le monde :
    voila j ai un code simple qui dessine un carre dans un JPanel avec paintCompnent
    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
    import javax.swing.*;
    import java.awt.*;
     
     
    public class Maiin {
    	public static void main(String[]args){
     
    		JFrame	f =	 new JFrame();
     		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     		f.setSize(500, 500);
     		f.setVisible(true);
     		f.setContentPane( new Pannau());
     
    	}
    }
    //class de Panel
    class Pannau extends JPanel{
     
    	int x=100,y=100;
     
    	public Pannau(){
    		setBackground(Color.white);
    		}
    //****partie de code a remplacer par une methode 
    //****Dessiner(int x,int y)qui dessine le carrer
    	protected void paintComponent(Graphics g){
    		super.paintComponent(g);
    		g.fillRect(x,y,30,30);
     
    	}
    }
    et je voudrai remplacer le bout de code de dessin par une méthode Dessiner() définis dans une autre class qui prend 2 paramètre int est dessine le carre .
    ca a l'air simple comme ca mais je n y arrive pas , un petit coup de pousse serais pas de trop
    merci a vous

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    On ne peut pas dessiner dans un JPanel
    sans passer par paintComponent(Graphics g)
    ... donc pas de méthode Dessiner() qui gribouille directement

    En revanche, paintComponent peut accéder à des variables ou des objets
    à l'extérieur. Du coup ça donne :

    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
    //class de Panel
    class Pannau extends JPanel{
     
            int x=-1,
            int y=-1;
     
    	public Pannau(){
    		setBackground(Color.white);
    		}
     
    	protected void paintComponent(Graphics g){
    		super.paintComponent(g);
                    if (x>-1) {   // ne se déclenche que si x a été renseigné par la méthode Dessiner
    		    g.fillRect(x,y,30,30);
                    }
     
    	}
     
    public void Dessiner(int gauche, int haut) {
       // on renseigne x,y avec les coordonnées
       x=gauche;
       y=haut;
       // on déclenche la peinture !!! :D
       repaint();   // appel de paintComponent()
    }
     
    }
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 76
    Par défaut
    tout d abord merci pour votre repose.
    mais dans ce cas comment je fait pour dessiner plusieurs carres à des endroit diffèrent de mon JPanel car c mon vrai problème, si je change les paramètres il dessine pas un nouveau carre mais redessine le premier dans un nouvel endroit.
    je m 'explique : j ai une fenêtre avec des boutons , chaque buttons correspond a une figure , j arrive a dessiner chaque figure et les faire déplacer ..ect mais je peux pas dessiner la même figure deux fois ou plus
    si vous avez un solution

  4. #4
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Je me doutais bien de la question suivante ...

    paintComponent ne déplace pas le carré. Il efface tout et il recommence !
    Comme paintComponent redessine tout le panneau,
    il faut mémoriser dans un ArrayList les dessins à faire
    et les faire dessiner par paintComponent en fonction de la forme trouvée.

    Vous pouvez vous faire une petite classe "Dessin"
    comprenant 3 informations :
    - la forme
    - la position x
    - la position y

    Chaque fois que vous cliquez sur le bouton "Rectangle",
    vous créez un nouvel objet Dessin avec par exemple
    forme = "Rectangle", x=100, y=50

    ce Dessin est ajouté à ArrayList.

    Faire pareil pour les autres formes...

    Dans la méthode paintComponent , reprendre tous les objets Dessins se trouvant dans votre ArrayList (avec une itération).

    Pour chaque objets se trouvant dans l'ArrayList, faire :
    si forme = "Rectangle" alors g.fillRect(x,y,30,30);
    si forme = "Ovale" alors ....
    etc.


    Ce système a l'avantage qu'en perfectionnant l'objet Dessin (couleurs, épaisseur de trait ...)
    vous finirez par faire votre application WinDraw dont vous rêvez ...
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 76
    Par défaut
    merci nepomucen , je vais essayer de coder tout ça ..
    (ca va me prendre tout la nuit , hahaha.....)

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 76
    Par défaut
    encore une petite question , c j ai le bout de code suivant
    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
     
    class dessin {
    int x ;
    string figure ;
    }
    //***********
    ArrayList al = new ArrayList();
    int i ;
    	for(i=0;i<5;i++)
    	{
    	dessin p =	new dessin();
    	p.pox=i;
    	p.forme=(" ");
    	al.add(p);
    	}
    je c q il faut utiliser al.get(i) pour avoir mes objets mais comment acceder au variable pox et forme .
    je bloque la

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 107
    Par défaut
    je c q il faut utiliser al.get(i) pour avoir mes objets mais comment acceder au variable pox et forme .
    (Je sais que je suis pas irréprochable mais essaye au moins de faire des mots correctement écrit. Juste pour celui qui va lire ton message par la suite. Qu'on ne cherche pas ce que tu essaye de dire ... )

    une idee:

    Il faut renseigné ton arraylist en lui donnant un type, ici dessin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<dessin> ALDessin = new ArrayList<dessin>();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for( int i = 0; i<al.size(); i++){
          if( al.get(i).forme.equals("RECTANGLE") ){
               //dessiner un rectangle
          }
    }
    Donc faire get(i). et tu auras accès au différente variable de ta classe dessin

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Popup menu : ameliorations de mon code
    Par drxel dans le forum Débuter
    Réponses: 6
    Dernier message: 04/09/2012, 09h55
  2. Ameliorer mon code
    Par GTSLASH dans le forum C#
    Réponses: 0
    Dernier message: 28/12/2011, 09h54
  3. réussite un peu aléatoire de mon code :S
    Par Kuchiki Byakuya dans le forum Débuter
    Réponses: 19
    Dernier message: 07/01/2010, 19h24
  4. un peu lourd mon code aidez moi
    Par UDSP50 dans le forum IHM
    Réponses: 2
    Dernier message: 15/04/2008, 22h09
  5. [langage] algo de bissection dans mon code
    Par killy dans le forum Langage
    Réponses: 5
    Dernier message: 19/01/2004, 18h35

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