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 :

Entre Paint et PaintComponent y a un truc que je pige pas?


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 31
    Points : 23
    Points
    23
    Par défaut Entre Paint et PaintComponent y a un truc que je pige pas?
    Bonjour,

    J'ai vraiment de gros soucy pour comprendre la diff entre paint et painComponent :

    Regarder mon prog ci-dessous :

    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
     
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.Graphics;
     
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    class exemple extends JPanel {//implements Runnable {
     
    		JPanel bob = new JPanel();
    		int i = 5;
    		exemple(){
    			setLayout(new FlowLayout());
    			bob.setPreferredSize(new Dimension(300, 400));
    			add(bob);
    			//Thread travailleur = new Thread(this);
    			//travailleur.start();
    		}
    	public void paintComponent(Graphics g) {
    	//public void paint(Graphics g) {
    		super.paintComponent(g);
    		//super.paint(g);
    		//g = this.getGraphics();
    		g.drawString("BIENVENUE SUR YAM 1.0",10,50);
    		System.out.println("ok");
    		g.drawLine(150, 150, 175+i, 220);
    		g.drawLine(150, 150, 125+i, 220);
    		g.drawLine(150, 150, 150+i, 90);
    		g.drawOval(135, 60, 30+i, 30);
    		g.drawLine(150, 100, 165+i, 150);
    		g.drawLine(150, 100, 135+i, 150);
    	}
     
    	/*public void run(){
    		i += 5;
    		System.out.println("bonjour");
    		try {
    			Thread.sleep(1000);
    		} catch (InterruptedException exception) {
    			exception.printStackTrace();
    		}
    		repaint();
    	}*/
     
    	public static void main(String[] args) {
    		JFrame fenetre = new JFrame();
    		fenetre.setSize(300,300);
    		fenetre.setContentPane(new exemple());
    		fenetre.pack();
    		fenetre.setVisible(true);
     
    	}
     
    }
    Le programme rentre bien dans ma fonction paintComponent (le message OK s'affiche) mais il me dessine rien.....

    Par contre, quand je met paint et super.paint(g) (commentaire enleve) bah la tout s'affiche nickel....

    Pourquoi?

    Merci de vos reponses

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 872
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 872
    Points : 22 939
    Points
    22 939
    Billets dans le blog
    53
    Par défaut
    Je dirais tout betement que le texte et les lignes s'affichent mais de la meme couleur que le fond du panel. super.paintComponent() ne doit pas restaurer la couleur du Graphics, quand elle termine de s'executer.

    Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g.setColor(Color.BLACK);

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 31
    Points : 23
    Points
    23
    Par défaut
    Salut,

    Non ce n'est pas ca.... J'ai exactement le meme probleme... Par contre j'ai remarqué une chose c'est que mon dessin apparait si j'agrandit la fenetre... Donc en faite mon dessin est fait avec le paintComponent sur le Graphics de fenetre et non le Graphics de bob (ma JPanel). C'est elle qui fou le bordel mais du coup je sait pas comment associer ma JPanel a mon dessin pour qu'il ce redessine ensemble...

    Merci de vos reponse.

    N.B : J'ai deja essayé de mettre g = bob.getGraphics() dans le paintComponent et cela n'a rien change.

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Il ne faut pas utiliser la méthode getGraphics() mais directement le Graphics reçu en paramètre...


    • paint() est chargé de dessiner tout le composant, et est hérité de l'API AWT. Il ne faut pas le redéfinir pour les composants Swing sous peine de "casser" l'affichage.
    • paintComponent() est quand à lui destiné à dessiner le composant Swing, et seulement lui.



    Bref pour un composant Swing paint() appellent toutes les méthodes de dessin :
    • paintComponent() pour dessiner le composant en lui même.
    • paintBorder() pour dessiner ses éventuelles bordure.
    • paintChildren() pour dessiner ses composants fils
    • Et peut-être d'autres...


    Donc lorsque tu surcharges paint() et que tu appelles la méthode super.paint(), tu dessines tous le composant, et son JPanel fils (bob), puis tu fais tes dessins par dessus. Ils sont toujours visibles puisqu'ils sont fait à la fin.

    Mais lorsque tu surcharges paintComponent(), tu fais tes dessins sur ton panel de base, mais ensuite le panel fils (bob) est dessiné par dessus ce qui fait que tu ne vois rien...



    Bref : Que veux-tu faire exactement avec ces dessins ?

    a++

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 31
    Points : 23
    Points
    23
    Par défaut
    Je n'ai pas vraiment d'objectif pour ce programme. C'est juste des essais pour bien comprendre le fonctionnement de paint() et accessoirement de paintComponent.

    Pour ce programme je veut juste qu'a l'affichage il me mette le dessin defini dans ma methode paintComponent(). Maintenant d'apres ce que tu me dit avec paintComponent() le JPanel fils l'efface. Et c'est vrai c'est ce que je remarque... Mais alors a quoi sert cette methode PaintComponent alors parce que si elle ce fait effacer par tous les JPanel fil on ne peut jamais l'utiliser...

    En faite pour mon exemple je voudrais savoir le code qu'il faut mettre en place pour que ca dessine mon dessin avec la methode PaintComponent()....

    En tout cas Merci pour ces explications....

  6. #6
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Ben ca le dessine avec paintComponent(). Mais comme tu met un autre panel par dessus ca l'efface...


    Si tu prend une feuille et que tu dessines dessus, puis que tu met une autre feuille par dessus tu ne vois plus ton dessin... et bien là c'est pareil !


    a++


    PS : Au passage question idiote : pourquoi tu utilises un second panel bob ?

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 31
    Points : 23
    Points
    23
    Par défaut
    OK je croit comprendre.... En faite le paintComponent ne sert qu'a redessiner dans une fenetre de base par contre dés l'arrivés d'une autre fenetre elle ce superpose dessus et on ne voit rien...

    C'est good...

    Merci en tout cas

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

Discussions similaires

  1. Fork() : y'a un truc que je pige pas
    Par Sin-an dans le forum Linux
    Réponses: 11
    Dernier message: 23/04/2009, 00h38
  2. [Débutant] Fonction surface ya un truc que je pige pas
    Par PaM... dans le forum MATLAB
    Réponses: 6
    Dernier message: 17/02/2009, 11h11
  3. [VB 2008] différence entre paint et onPaint
    Par olivier57b dans le forum Windows Forms
    Réponses: 2
    Dernier message: 25/04/2008, 18h30
  4. paint ou paintComponents ?
    Par g0up1l dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 19/05/2007, 23h15
  5. un truc qui ne passe pas sous firefox ...
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 39
    Dernier message: 08/11/2005, 16h59

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