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 :

Probleme paint() repaint()


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Points : 68
    Points
    68
    Par défaut Probleme paint() repaint()
    J'aimerais tracer des courbes quand j'appuie sur un bouton mais le probleme que j'ai c'est que si je trace une courbe et que j'appuie ensuite sur un bouton pour en tracer une nouvelle je me retrouve avec deux courbes qui se superposent alors que je ne voudrais d'afficher que la nouvelle courbe.

    Je poste mon code car je ne vois vraiment pas ou peut bien etre mon erreur:

    Class qui crée mon UI
    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 java.awt.BorderLayout;
    import javax.swing.*;
     
    public class UI {
     
    	JFrame fenetreFrame;
    	JPanel principalPanel;
    	TraceGraph graphPanel;
    	JButton startButton;
     
     
    	UI(){
    		fenetreFrame = new JFrame();
    		principalPanel = new JPanel();
    		graphPanel = new TraceGraph(this);
    		startButton = new JButton("Start");
     
    		BorderLayout principalLayout = new BorderLayout();
    		principalPanel.setLayout(principalLayout);
    		principalPanel.add("Center",graphPanel);
    		principalPanel.add("South",startButton);
     
    		fenetreFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		fenetreFrame.setContentPane(principalPanel);	
    		fenetreFrame.setSize(800,600);
    		fenetreFrame.setVisible(true);
     
    		GestionE gestionevenements = new GestionE(this);
    		startButton.addActionListener(gestionevenements);
     
    	}
    }
    Class listener:
    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
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.JButton;
     
     
    public class GestionE implements ActionListener {
     
    	UI refUI;
     
     
    	GestionE(UI refUI){
    		this.refUI = refUI;
    	}
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		JButton sourceEvenement = (JButton) e.getSource();
    		if(sourceEvenement==refUI.startButton){
    			refUI.graphPanel.x1 = 200;
    			refUI.graphPanel.y1 = 200;
    			refUI.graphPanel.x2 = 300;
    			refUI.graphPanel.y2 = 300;
    			refUI.graphPanel.repaint();
     
    		}
    	}
     
    }
    Class qui trace une droite:
    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 java.awt.Graphics;
    import java.awt.Graphics2D;
    import javax.swing.JPanel;
     
     
    public class TraceGraph extends JPanel{
     
    	UI refUI;
    	int x1,x2,y1,y2;
     
     
    	TraceGraph(UI refUI){
    		this.refUI = refUI;
    		x1 = 0;
    		y1 = 0;
    		x2 = 100;
    		y2 = 100;
     
    	}
     
     
     
    	public void paint(Graphics g){
     
    		g.drawLine(x1, y1, x2, y2);
     
    	}
    }
    Class main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class Debut {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		new UI();
     
    	}
     
    }
    Donc quand mon programme se lance il trace une droite qui va de (0,0) à (100,100) et ce qu'il devrait faire en pressant le bouton "Start" c'est tracer une nouvelle droite qui va de (200,200) à (300,300) tout en effacant la precedente pour n'avoir qu'une droite à l'ecran or là je me retrouve avec 2 droites.

    Si quelqu'un a une idée je suis preneur. Merci d'avance.

  2. #2
    Membre confirmé Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Points : 565
    Points
    565
    Par défaut
    paint et repaint n'efface pas !! il redessine ..

    Petit truc simple pour resoudre ca : redessiner le fond de ta fenetre dans le paint ...

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Points : 68
    Points
    68
    Par défaut
    Ok merci de ta réponse, je vais chercher comment redessiner le font de ma fenetre alors

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Points : 68
    Points
    68
    Par défaut
    Bon j'ai mis un fillRect pour remplir le fond de ma fenetre mais mon probleme est toujours present car je ne sais pas pourquoi il semble y avoir un probleme de rafraichissement de ma fenetre. En effet je ne voit l'effet du repaint() avec fillRect que si je minimise puis fait reapparaitre ma fenetre, si je ne fais pas ca j'ai toujours mes 2 droites à l'ecran.

    Une idée?

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Points : 68
    Points
    68
    Par défaut
    Ok, probleme resolu, je fais un repaint sur l'ensemble de ma fenetre et ca passe. Merci pour l'aide en tout cas miloux

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

Discussions similaires

  1. Probleme avec repaint()
    Par LinuxUser dans le forum AWT/Swing
    Réponses: 15
    Dernier message: 02/01/2008, 01h04
  2. Probleme de Repaint
    Par beuhnoix dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 09/11/2007, 16h28
  3. paint, repaint, thread?
    Par rageice dans le forum AWT/Swing
    Réponses: 13
    Dernier message: 16/07/2007, 09h04
  4. Probleme methode repaint()
    Par cybercrisp dans le forum AWT/Swing
    Réponses: 14
    Dernier message: 25/10/2006, 00h21
  5. Réponses: 4
    Dernier message: 08/10/2006, 16h16

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