[Resolu] repaint(), je comprends pas.

repaint(), je comprends pas. [Resolu] - Java - Programmation

Marsh Posté le 27-07-2007 à 17:01:50    

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 :
  1. import java.awt.BorderLayout;
  2. import javax.swing.*;
  3. public class UI {
  4. JFrame fenetreFrame;
  5. JPanel principalPanel;
  6. TraceGraph graphPanel;
  7. JButton startButton;
  8. UI(){
  9.  fenetreFrame = new JFrame();
  10.  principalPanel = new JPanel();
  11.  graphPanel = new TraceGraph();
  12.  startButton = new JButton("Start" );
  13.  BorderLayout principalLayout = new BorderLayout();
  14.  principalPanel.setLayout(principalLayout);
  15.  principalPanel.add("Center",graphPanel);
  16.  principalPanel.add("South",startButton);
  17.  fenetreFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  18.  fenetreFrame.setContentPane(principalPanel);
  19.  fenetreFrame.setSize(800,600);
  20.  fenetreFrame.setVisible(true);
  21.  GestionE gestionevenements = new GestionE(this);
  22.  startButton.addActionListener(gestionevenements);
  23. }
  24. }


 
Class listener:

Code :
  1. import java.awt.event.ActionEvent;
  2. import java.awt.event.ActionListener;
  3. import javax.swing.JButton;
  4. public class GestionE implements ActionListener {
  5. UI refUI;
  6. GestionE(UI refUI){
  7.  this.refUI = refUI;
  8. }
  9. @Override
  10. public void actionPerformed(ActionEvent e) {
  11.  JButton sourceEvenement = (JButton) e.getSource();
  12.  if(sourceEvenement==refUI.startButton){
  13.   refUI.graphPanel.x1 = 200;
  14.   refUI.graphPanel.y1 = 200;
  15.   refUI.graphPanel.x2 = 300;
  16.   refUI.graphPanel.y2 = 300;
  17.   refUI.graphPanel.repaint();
  18.  }
  19. }
  20. }


 
Class qui trace une droite:

Code :
  1. import java.awt.Graphics;
  2. import java.awt.Graphics2D;
  3. import javax.swing.JPanel;
  4. public class TraceGraph extends JPanel{
  5. int x1,x2,y1,y2;
  6. TraceGraph(){
  7.  x1 = 0;
  8.  y1 = 0;
  9.  x2 = 100;
  10.  y2 = 100;
  11. }
  12. public void paint(Graphics g){
  13.  g.drawLine(x1, y1, x2, y2);
  14. }
  15. }


 
Class main:

Code :
  1. public class Debut {
  2. /**
  3.  * @param args
  4.  */
  5. public static void main(String[] args) {
  6.  new UI();
  7. }
  8. }


 
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.


Message édité par plzhelp le 27-07-2007 à 18:05:14

---------------
...
Reply

Marsh Posté le 27-07-2007 à 17:01:50   

Reply

Marsh Posté le 27-07-2007 à 17:31:32    

Non tu dois effacer ta zone en appliquant par exemple un fillRect avec la bonne taille dans ta zone de dessin. C'est le seul moyen d'effacer ta zone.

Reply

Marsh Posté le 27-07-2007 à 17:43:02    

Bon je viens d'essayer, ca marche pas. A moins qu'il ne faille pas mettre le fillRect dans la methode paint(). Merci quand meme.


Message édité par plzhelp le 27-07-2007 à 17:55:14

---------------
...
Reply

Marsh Posté le 27-07-2007 à 17:57:37    

Ok, en fait le probleme est bien plus compliqué que ca. Je viens de me rendre compte que le fillRect marche, mais l'apercu de la fenetre ne s'actualise pas.
 
Je me suis rendu compte que ca marchait en minimisant la fenetre puis en la faisant reapparaitre et la en effet ma premiere droite avait disparu.
 
Une idee sur la provenance de ce probleme de "rafraichissement"?


Message édité par plzhelp le 27-07-2007 à 17:57:59

---------------
...
Reply

Marsh Posté le 27-07-2007 à 18:04:55    

En fait j'ai trouvé, je fais un repaint de ma frame et ca marche, merci omartin pour ton aide :)


---------------
...
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed