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

AWT/Swing Java Discussion :

Effacer un JPanel


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 13
    Par défaut Effacer un JPanel
    salut a tous, apres mes quelques déboires pour ecrire en double buffer dans un JPanel, je suis enfin arrivé a mes fins. Je rencontre néanmoins un problème désormais pour effacer mon JPanel. Pourriez vous me donner un coup de main, car la je bloque réellement, j'ai essayé diverses idées, mais elles se sont toutes révélées infructueuses. Je vous remercie d'avance pour votre aide. Voici mon code pour dessiner :

    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
     
    public class EcouteClic extends JPanel {
    	int x = 0, y = 0, dragx = 0, dragy = 0;
     
    	public static Graphics graphic;
    	public Image img;
    	public static Graphics g2d ;
     
    	public Dimension getPreferredSize() {
    		return new Dimension(128, 128);
    	}
     
    	public EcouteClic() {	
     
    		addMouseListener(new java.awt.event.MouseAdapter() {
    			public void mousePressed(java.awt.event.MouseEvent e) {
    				x = e.getX();
    				y = e.getY();
    			}
    		});
     
    		addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
    			public void mouseDragged(java.awt.event.MouseEvent e) {
    				update(graphic);
    				dragx = e.getX();
    				dragy = e.getY();
    				graphic.setColor(Color.black);
    				if (Fenetre.toggle.isSelected()){
    					graphic.setColor(Color.white);
    				}
    				graphic.drawLine(x, y, dragx , dragy);
    				x = dragx; y =dragy;
    				repaint();
    			}
    		});
    	}
     
    	public void update (Graphics g){
    		paint(g);
    	}
    	public void paint(Graphics g) {
    		g2d = (Graphics2D) g;
     
    		if (img==null){
    			img = createImage(128,128);
    			graphic = (Graphics2D) img.getGraphics();
    			((Graphics2D) graphic).setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
    			((Graphics2D) graphic).setStroke(new BasicStroke(10f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
    			graphic.setColor(Color.white);
    			graphic.fillRect(0,0,128,128);
    		}
     
    		g2d.drawImage(img, 0, 0, null);
     
     
    	}
    }

  2. #2
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Par effacer ton JPanel, tu entends l'effacer lui ou effacer ce qu'il contient ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 13
    Par défaut
    Autant pour moi, desole de ne pas avoir été clair du premier coup, c'est vrai que pour moi ca paraissait évident. C'est donc bien pour effacer le contenu de mon JPanel. C'est a dire dans mon cas le faire redevenir blanc.

  4. #4
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Utilise un booléen, que tu lis dans paint :
    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
    public void paint(Graphics g) {
     
      // si le composant est opaque
      if(delete)
        return;
     
      // sinon
      if(delete) {
        g.setColor(getBackground());
        g.fillRect(0, 0, getWidth(), getHeight());
        return;
      }
     
      // le reste de la méthode
    }
    Et lorsque tu changes la valeur de ce booléen, n'oublie pas d'appeler repaint().

    [EDIT] et surcharge paintComponent plutot que paint.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 13
    Par défaut
    Un point me chagrine un peu, return sur une fonction void, ca marche ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 13
    Par défaut
    Ok je viens de tester, donc ca prait pas mal, le soucis c'est que je n'ai plus mon fond blanc dans mon JPanel, et je ne peux plus dessiner dedans j'ai l'impression.

    Je continue mes test sur la piste que tu m'as donné. Merci.

    juste comme ca quelle est la différence entre paintComponent et paint ?

  7. #7
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    n'oublie pas de changer la valeur du boolean lorsque tu fais le delete .... et puis à mon avis il doit manquer un '!' quelque part ... parce que deux fois "if(delete)" d'affilée avec 1 return entre les deux, j'aurais tendance à dire que tu ne rentre jamais dans le second if

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 13
    Par défaut
    Ok donc j'avais corrigé les if, je m'etais meme servi d'un else (je progresse tous les jours)

    J'ai bien modifier la valeur du delete une fois passé dans le if. Le résultat que j'obtient est de faire disparaitre mon JPnale quand je cliuqe sur mon bouton effacer (alors que je voulais juste le vider de son contenu), et il reapparait des que je redessine, avec les dessins presents avant.

    JE vous avoue que je colle.

  9. #9
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    premièrement le else n'est pas indispensable , tu pourrais avoir :

    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
    public void paint(Graphics g) { 
     
      // si le composant est opaque 
      if(!delete) {
    //à mon avis, y'a des choses à mettre ici pour dessiner des objets normaux .... enfin, l'algo normal ...
        return; 
    }
     
    //sinon
         g.setColor(getBackground()); 
        g.fillRect(0, 0, getWidth(), getHeight()); 
        delete = !delete;
        return; 
     
    }
    je ne vois pas pourquoi ça planterai ...

    ahh ... réflexion faite : si ... tu utilise 1 JPanel ? ne redéfinis pas paint, mais paintComponent .
    Voila .. C le seul conseil que j'ai à te donner ...

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 13
    Par défaut
    Ok merci beaucoup NeptuS. J'ai toujours pas compris la différence entre paint() et painttComponent() mais je vais suivre ton conseil. Si je m'en sort je mettrai résolu, j'espere que ca sera le cas, je finis juste quelques petits scripts en php avant de m'y mettre. heureusement que je n'ai pas tous ses problemes dans tous les langages

Discussions similaires

  1. Effacer les contenus d'un JPanel d'un seul coup
    Par selma89 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 12/09/2011, 19h01
  2. dessin du JPanel qui s'efface qd je scroll
    Par Invité dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 06/08/2010, 14h34
  3. Effacer le contenu d'un JPanel?
    Par diditin dans le forum Agents de placement/Fenêtres
    Réponses: 8
    Dernier message: 16/07/2009, 12h11
  4. Effacer les dessins faits dans un JPanel
    Par michaeljeru dans le forum 2D
    Réponses: 1
    Dernier message: 26/11/2008, 09h37
  5. clone qui efface un JPanel
    Par menuge dans le forum Langage
    Réponses: 7
    Dernier message: 07/12/2006, 14h53

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