Probleme repaint et passage de variables

Probleme repaint et passage de variables - Java - Programmation

Marsh Posté le 18-07-2007 à 17:45:46    

Bon, je decouvre Java et je voudrais qu'une droite allant du point (0,0) au point (100,100) se trace sur ma fenetre lorsque je clique dessus, probleme quand je clique rien ne se passe :/ J'ai l'impression que ma variable parametre qui definit les coordonnées du point final de la droite a tracer ne passe pas correctement d'une classe à une autre et que donc rien ne se passe mais je ne vois pas ou est mon erreur.
 
Mon code:
 
Classe Demarrer:

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


 
Classe FenetrePrincipale:

Code :
  1. import java.awt.BorderLayout;
  2. import java.awt.event.WindowAdapter;
  3. import java.awt.event.WindowEvent;
  4. import javax.swing.JFrame;
  5. import javax.swing.JPanel;
  6. public class FenetrePrincipale {
  7. JPanel fenetrePrincipale;
  8. int parametre = 0;
  9. Affichage affichage;
  10. //Construteur
  11. FenetrePrincipale(){
  12.  fenetrePrincipale = new JPanel();
  13.  BorderLayout disposition = new BorderLayout();
  14.  fenetrePrincipale.setLayout(disposition);
  15.  affichage = new Affichage(parametre);
  16.  fenetrePrincipale.add("Center",affichage);
  17.  //Creation de la fenetre
  18.  JFrame frame = new JFrame("Fenetre Principale" );
  19.  frame.setContentPane(fenetrePrincipale);
  20.  frame.setSize(250, 250);
  21.  frame.setVisible(true);
  22.  GestionEvenement gestionEvenement = new GestionEvenement(this);
  23.  fenetrePrincipale.addMouseListener(gestionEvenement);
  24.  // Window listener pour la fenetre principale         
  25.  frame.addWindowListener(new WindowAdapter(){           
  26.   public void windowClosing(WindowEvent e){               
  27.    System.exit(0);           
  28.    }       
  29.   });
  30. }
  31. //Methodes
  32. public void UpdateParametre(){
  33.  parametre = 100;
  34.  affichage.repaint();
  35. }
  36. }


 
Classe Affichage:

Code :
  1. import java.awt.Graphics;
  2. import javax.swing.JPanel;
  3. public class Affichage extends JPanel {
  4. /**
  5.  *  
  6.  */
  7. private static final long serialVersionUID = 1L;
  8. int parametre;
  9. //Constructeur
  10. Affichage(int p){
  11.  parametre = p;
  12. }
  13. //Methodes
  14. public void paintComponent(Graphics g){
  15.  g.drawLine(0, 0, parametre, parametre);
  16. }
  17. }


 
Classe GestionEvenement:

Code :
  1. import java.awt.event.MouseEvent;
  2. import java.awt.event.MouseListener;
  3. public class GestionEvenement implements MouseListener {
  4. FenetrePrincipale refFenetrePrincipale;
  5. GestionEvenement(FenetrePrincipale refFenetrePrincipale){
  6.  this.refFenetrePrincipale = refFenetrePrincipale;
  7. }
  8. @Override
  9. public void mouseClicked(MouseEvent e) {
  10.  // TODO Auto-generated method stub
  11. }
  12. @Override
  13. public void mouseEntered(MouseEvent e) {
  14.  // TODO Auto-generated method stub
  15. }
  16. @Override
  17. public void mouseExited(MouseEvent e) {
  18.  // TODO Auto-generated method stub
  19. }
  20. @Override
  21. public void mousePressed(MouseEvent e) {
  22.  // TODO Auto-generated method stub
  23. }
  24. @Override
  25. public void mouseReleased(MouseEvent e) {
  26.  refFenetrePrincipale.UpdateParametre();
  27. }
  28. }


Message édité par plzhelp le 18-07-2007 à 17:47:24

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

Marsh Posté le 18-07-2007 à 17:45:46   

Reply

Marsh Posté le 18-07-2007 à 17:51:07    

parametre est un int donc type de base donc c'est la valeur qui est passé à Affichage lors de la construction de l'objet et non une référence vers paramètre

Message cité 1 fois
Message édité par zapan666 le 18-07-2007 à 17:51:40

---------------
my flick r - Just Tab it !
Reply

Marsh Posté le 18-07-2007 à 18:06:40    

zapan666 a écrit :

parametre est un int donc type de base donc c'est la valeur qui est passé à Affichage lors de la construction de l'objet et non une référence vers paramètre


 
Ok je vois, c'est ce que je pensais, donc j'ai modifié mon code en envoyant directement à la classe Affichage une reference à toute ma classe FenetrePrincipale comme ca je suis presque sur que la reference à parametre passera aussi.
 
Classe FenetrePrincipale

Code :
  1. import java.awt.BorderLayout;
  2. import java.awt.event.WindowAdapter;
  3. import java.awt.event.WindowEvent;
  4. import javax.swing.JFrame;
  5. import javax.swing.JPanel;
  6. public class FenetrePrincipale {
  7. JPanel fenetrePrincipale;
  8. int parametre = 0;
  9. Affichage affichage;
  10. //Construteur
  11. FenetrePrincipale(){
  12.  fenetrePrincipale = new JPanel();
  13.  BorderLayout disposition = new BorderLayout();
  14.  fenetrePrincipale.setLayout(disposition);
  15.  affichage = new Affichage(this);
  16.  fenetrePrincipale.add("Center",affichage);
  17.  //Creation de la fenetre
  18.  JFrame frame = new JFrame("Fenetre Principale" );
  19.  frame.setContentPane(fenetrePrincipale);
  20.  frame.setSize(250, 250);
  21.  frame.setVisible(true);
  22.  GestionEvenement gestionEvenement = new GestionEvenement(this);
  23.  fenetrePrincipale.addMouseListener(gestionEvenement);
  24.  // Window listener pour la fenetre principale         
  25.  frame.addWindowListener(new WindowAdapter(){           
  26.   public void windowClosing(WindowEvent e){               
  27.    System.exit(0);           
  28.    }       
  29.   });
  30. }
  31. //Methodes
  32. public void UpdateParametre(){
  33.  parametre = 100;
  34.  affichage.repaint();
  35. }
  36. }


 
Classe Affichage

Code :
  1. import java.awt.Graphics;
  2. import javax.swing.JPanel;
  3. public class Affichage extends JPanel {
  4. /**
  5.  *  
  6.  */
  7. private static final long serialVersionUID = 1L;
  8. FenetrePrincipale refFenetrePrincipale;
  9. //Constructeur
  10. Affichage(FenetrePrincipale refFenetrePrincipale){
  11.  this.refFenetrePrincipale = refFenetrePrincipale;
  12. }
  13. //Methodes
  14. public void paintComponent(Graphics g){
  15.  g.drawLine(0, 0, refFenetrePrincipale.parametre, refFenetrePrincipale.parametre);
  16. }
  17. }


 
La droite se trace bien comme désiré désormais mais j'ai pas l'impression que ce soit la facon la plus raffinée pour le faire.


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

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

Sujets relatifs:

Leave a Replay

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