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

 Java Discussion :

Dessiner un rectangle et l'ajouter à un panneau


Sujet :

Java

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 114
    Par défaut Dessiner un rectangle et l'ajouter à un panneau
    Salut,

    voila à chaque appel de la classe "rect" je dessine mon rectangle et je l'ajoute à un JPanel "content ", je sais que la méthode responsable de dessiner dans le JPanel est paintComponent qui prend en parametre un Graphics, alors dans un constructeur de la classe "rect" je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public rect(int x, int y){
    		Graphics e = null;
    		paintComponent(e, x, y);
     
    	}
    la methode paintComponent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    protected void paintComponent(Graphics g, int x, int y) {
     
    		g.setColor(Color.red);
    		g.fillRect(x, y, 20, 20);
    	}
    et voila comment j'appel le constructeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public void addRect(){
     
                    Random r = new Random();
    		int x = r.nextInt(490);
    		int y = r.nextInt(390);
     
    		rect rec = new rect(x,y);
     
            	content.add(rec);
    }
    Mais Ecipse me signale une erreur dans la derneire ligne, que "rec" n'est pas un componant !

    comment puis je remédier ce probleme ? ensuite, est ce qu'il y a une façon plus "juste" pour le faire ?
    et merci d'avance

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Ta classe doit tout simplement hériter d'un JComponent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public Rect extends JComponent
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public Rect extends JPanel
    Feront l'affaire.

    (juste en passant en général on met un majuscule au début des nom de classe en java par convention, par ex: Rect et non rect)

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 114
    Par défaut
    Merci beaucoup, j'ai retenu ma leçon, j'ai plus d'erreur maintenant, mais je n'arrivais toujours pas afficher le rectangle, même si le compilateur ne me signale aucune erreur... alors j'ai changé la structure du programme, l'appel au constructeur se deroule comme suite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void addRect(){
     		Rect rec = new Rect();
         	        content.add(rec);
    }
    et le constructeur ne fait que appeler la méthode PaintComponent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public Rect(){
    		repaint();				
    	}
    Et c'est dans la méthode PaintComponant que je calcule la position du rectangle et je dessine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    protected void paintComponent(Graphics g) {
    		super.paintComponent(g);
     
    		Random r = new Random();
    		int x = r.nextInt(490);
    		int y = r.nextInt(390);
     
    		g.setColor(Color.red);
    		g.fillRect(x, y, getWidth(), getHeight());
     
    	}
    Le compilateur ne signale toujours aucun probleme, mais le panel n'affiche rien... Je me demande alors où j'ai du me tremper...

    J'ai l'intention de changer le rectangle par une image par la suite, c'est pour cela que je l'ai mis dans une autre classe séparé..

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    La méthode "paintComponent" ne peut pas être appelée tant que le composant n'est pas affiché. Tu appelles "repaint" dans le constructeur, donc le composant n'est pas encore construit, donc pas encore affiché, donc "paintComponent" n'est jamais appelé.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

Discussions similaires

  1. [C#][Direct3D] Comment dessiner un rectangle
    Par FraktaL dans le forum DirectX
    Réponses: 3
    Dernier message: 26/10/2005, 00h29
  2. Réponses: 14
    Dernier message: 13/10/2005, 15h00
  3. Dessiner un rectangle sur une forme
    Par Neo41 dans le forum MFC
    Réponses: 6
    Dernier message: 13/08/2005, 01h08
  4. [VB.NET] Dessiner plusieurs rectangles.
    Par Emcy dans le forum Windows Forms
    Réponses: 9
    Dernier message: 23/03/2005, 16h57
  5. Dessiner un rectangle avec bords et texte ...
    Par Djedjeridoo dans le forum Composants VCL
    Réponses: 3
    Dernier message: 16/06/2003, 17h17

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