Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1848 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Resolu repaint n'appele pas paintcomponentt

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Resolu repaint n'appele pas paintcomponentt

n°2311288
lolo1971
Posté le 20-02-2018 à 09:49:49  profilanswer
 

Bonjour,
  Je suis débutant et je coince sur mon programme.
Mon problème est que j'essaie de tracer une courbe (trajectoire dans mon cas) dans un panel mais la classe paintcomponent n'est jamais appelé sauf la première fois lorsque je créé mon panel
 Mon code est

Code :
  1. Calcul nouvelleEtude = new Calcul(this.vitesse,this.angle,this.hauteur,this.dt,this.masse,this.k, etude);
  2.  // affichage des résultat dans un tableau compris dans des onglets avec couleur différentes à chaque étude
  3.  String  title[] = {"T (s)", "X (Mètre)","Y (Mètre)","Vx (m/s)","Vy (m/s)"," V (m/s)"};
  4.  JTable tableau = new JTable (nouvelleEtude.getData(),title);
  5.  tableau.setBackground(couleur[nouvelleEtude.getNombreEtude()-1]);
  6.  onglet.add("Courbe n° "+(nouvelleEtude.getNombreEtude()), new JScrollPane(tableau));
  7.  onglet.setFont(font1);
  8.  onglet.setSelectedIndex(nouvelleEtude.getNombreEtude()-1);
  9.  affichage.add(onglet);
  10.  //affichage de la trajectoire dans des onglets avec couleur différentes à chaque étude
  11.  Panneau courbe = new Panneau();
  12.  courbe.setBackground(couleur[nouvelleEtude.getNombreEtude()-1]);
  13.  ongletCourbe.add("Courbe n° "+(nouvelleEtude.getNombreEtude()),courbe);
  14.  ongletCourbe.setSelectedIndex(nouvelleEtude.getNombreEtude()-1);
  15.  afficheCourbe.add(ongletCourbe);
  16.  // affichage des differents coefficients résultant des parametres
  17.  info.setText( "\n\n                         Projectile : "+ choixProjectile.getSelectedItem()
  18.                +"\n                         Etude : "+choixEtude.getSelectedItem()
  19.                +"\n  Masse volumique                     : "+this.p
  20.                +"\n  Nombre de reynolds                : "+this.re
  21.          +"\n  Coéfficient de pénetration Cx : "+this.cx
  22.          +"\n  Coéfficient K                         : "+this.k
  23.          +"\n\n                         Courbe N° : "+nouvelleEtude.getNombreEtude());
  24.  info.repaint();
  25.  // Tracer la courbe point par point
  26.    float y= 229/(nouvelleEtude.getyMax()*1.1f);
  27.    float x = 780/(nouvelleEtude.getxMax()*1.1f);
  28.    float x1,x2,y1,y2;
  29.    int j = 0;
  30.    do {
  31.     x1 = 20f +(float) tableau.getValueAt(j, 1);
  32.     x2 = 20f +(float) tableau.getValueAt(j+1, 1);
  33.     y1 = 20f+ (float) tableau.getValueAt(j, 2);
  34.     y2 = 20f +(float) tableau.getValueAt(j+1, 2);
  35.     courbe.setPosX((int)x1);
  36.     courbe.setPosY((int)y1);
  37.     courbe.setPosX2((int)x2);
  38.     courbe.setPosY2((int)y2);
  39.     courbe.repaint();
  40.         try {
  41.           Thread.sleep(10);
  42.         } catch (InterruptedException e) {
  43.           e.printStackTrace();
  44.         }
  45.     j++;
  46.    }while (y2>20);


et ma classe panneau est

Code :
  1. public class Panneau extends JPanel {
  2.    private float posX = 100;
  3.   private float posY = 100;
  4.   private float posX2 = -50;
  5.   private float posY2 = -50;
  6.   public void paintcomponent(Graphics g){
  7.  super.paintComponent(g);
  8.  Graphics2D g2 = (Graphics2D) g;
  9.     g2.setColor(Color.red);
  10.     g2.drawOval((int) posX, (int) posY, 50, 50);
  11.     g2.draw(new Line2D.Float(posX, posY, posX2, posY2));
  12.   }
  13.   public float getPosX() {
  14.     return posX;
  15.   }
  16.   public void setPosX(float x1) {
  17.     this.posX = x1;
  18.   }
  19.   public float getPosY() {
  20.     return posY;
  21.   }
  22.   public void setPosY(float posY) {
  23.     this.posY = posY;
  24.   }
  25. /**
  26. * @return the posX2
  27. */
  28. protected float getPosX2() {
  29. return posX2;
  30. }
  31. /**
  32. * @param posX2 the posX2 to set
  33. */
  34. protected void setPosX2(float posX2) {
  35. this.posX2 = posX2;
  36. }
  37. /**
  38. * @return the posY2
  39. */
  40. protected float getPosY2() {
  41. return posY2;
  42. }
  43. /**
  44. * @param posY2 the posY2 to set
  45. */
  46. protected void setPosY2(float posY2) {
  47. this.posY2 = posY2;
  48. }       
  49. }


 
Malgré mes recherches, je suis bloqué.
Pour info j'utilise Box comme Layout et j'ai l'impression que cela vient peut être de cela.
 
Je remercie d'avance toutes les personnes qui peuvent m'aider


Message édité par lolo1971 le 25-02-2018 à 08:07:03
mood
Publicité
Posté le 20-02-2018 à 09:49:49  profilanswer
 

n°2311313
lolo1971
Posté le 20-02-2018 à 13:42:59  profilanswer
 

je viens de m'apercevoir que l'affichage du tableau des données se faisaient après la boucle du tracer point par point
 
alors que ( il me semble) l'affichage doit se faire puis le tracé de la courbe et non l'inverse.
 
Est-ce qu'il y a une méthode pour forcer l'affichage du tableau avant la courbe ?
j'ai essayé avec updateUi et repaint mais cela ne marche pas

n°2311374
lolo1971
Posté le 21-02-2018 à 11:24:18  profilanswer
 

Avec Graphics cela fonctionne mais pas avec Graphics2D
Je ne comprends pas
Est-ce qu'il y a quelqu'un qui peut m'aider
merci

n°2311524
lolo1971
Posté le 23-02-2018 à 11:18:19  profilanswer
 

Le problème du tracé de courbe est résolu. Voila mon code

Code :
  1. @Override
  2. public  void paintComponent(Graphics g1){
  3.     super.paintComponents(g1);
  4.   Graphics2D g = (Graphics2D) g1;
  5.   super.paintComponents(g);
  6.   g.drawRect(0, 0, 100, 100);
  7.   g.drawString("courbe", 100, 100);
  8.   g.setBackground(Color.cyan);
  9.      g.setColor(Color.red);
  10.      g.draw(new Line2D.Float(posX, posY, posX2, posY2));
  11.   }
  12.   public float getPosX() {
  13.     return posX;
  14.   }
  15.   public void setPosX(float x1) {
  16.     this.posX = x1;
  17.   }
  18.   public float getPosY() {
  19.     return posY;
  20.   }
  21.   public void setPosY(float posY) {
  22.     this.posY = posY;
  23.   }
  24. /**
  25. * @return the posX2
  26. */
  27. protected float getPosX2() {
  28. return posX2;
  29. }
  30. /**
  31. * @param posX2 the posX2 to set
  32. */
  33. protected void setPosX2(float posX2) {
  34. this.posX2 = posX2;
  35. }
  36. /**
  37. * @return the posY2
  38. */
  39. protected float getPosY2() {
  40. return posY2;
  41. }
  42. /**
  43. * @param posY2 the posY2 to set
  44. */
  45. protected void setPosY2(float posY2) {
  46. this.posY2 = posY2;
  47. }       
  48. }

 

Code :
  1. private  void traceCourbe(float xMax, float yMax, JTable tableau) {
  2.  new Thread(new Runnable(){
  3.   public void run(){
  4.    afficheCourbe.removeAll();
  5.    afficheCourbe.updateUI();
  6.    Panneaubis courbe = new Panneaubis();
  7.    afficheCourbe.add(courbe);
  8.    //afficheCourbe.validate();
  9.    //afficheCourbe.revalidate();
  10.    //afficheCourbe.repaint();
  11.    afficheCourbe.updateUI();
  12.    // Tracer la courbe point par point
  13.     float y= 220/(yMax*1.1f);
  14.     float x = 800/(xMax*1.1f);
  15.     System.out.println("x=: "+x+"y= : "+y+"  "+xMax+ "    "+yMax);
  16.     SwingWorker sw = new SwingWorker(){
  17.       protected Object doInBackground() throws Exception {
  18.        float x1,x2,y1,y2;
  19.        int j = 0;
  20.        do {
  21.                     x1 = 20f +(float) tableau.getValueAt(j, 1)*x;
  22.                  x2 = 20f +(float) tableau.getValueAt(j+1, 1)*x;
  23.                  y1 = 220 - (float) tableau.getValueAt(j, 2)*y;
  24.                  y2 = 220 -(float) tableau.getValueAt(j+1, 2)*y;
  25.         System.out.println(x1+"  "+x2+"  "+y1+"  "+y2);
  26.                  courbe.setPosX(x1);
  27.         courbe.setPosY(y1);
  28.         courbe.setPosX2(x2);
  29.         courbe.setPosY2(y2);
  30.         courbe.validate();
  31.         courbe.revalidate();
  32.         courbe.repaint();
  33.             try {
  34.               Thread.sleep(100);
  35.             } catch (InterruptedException e) {
  36.               e.printStackTrace();
  37.             }
  38.         j++;
  39.         //System.out.println(courbe.getPosX()+"     "+courbe.getPosX2()+"      "+courbe.getPosY()+"     "+courbe.getPosY2());
  40.        }while (y2>20);
  41.        return null;
  42.                 }
  43.       public void done(){
  44.        courbe.updateUI();
  45.              if(SwingUtilities.isEventDispatchThread())
  46.                System.out.println("Dans l'EDT ! " );
  47.                courbe.repaint();
  48.            }       
  49.          };
  50.          sw.execute();
  51.       return;
  52.   }
  53.  }).start();
  54. }


mais dans mon panel apparait le reste de l’écran (en fond de JPanel)lorsque le tracé se fait  
 
 

n°2311530
Lt Ripley
Ils ont tout niqué
Posté le 23-02-2018 à 12:16:47  profilanswer
 

Salut
 
Je suis étonné que tu n'aies pas eu d'aide, en général j'en ai toujours !
 
Je débute en Java moi aussi
 
Tu vois le bureau de windows dans ton panel ?
 
Moi j'ai ça dans ma classe panneau (qui extend jpanel), tu l'as ?
 

Code :
  1. public void paintComponent(Graphics g){
  2.    
  3.     g.setColor(Color.white);
  4.     g.fillRect(0, 0, this.getWidth(), this.getHeight());


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
n°2311536
lolo1971
Posté le 23-02-2018 à 13:40:47  profilanswer
 

Salut
  Avec fillRect, le problème ne se pose pas  
Le panel se met bien à la couleur
Je ne le met pas car je ne veux pas effacer les lignes faites pour afficher ma courbe
Ma fenêtre comporte plusieurs box et ils apparaissent dans mon panel lorsque je l'appelle  
Apparemment il n'y a pas grand monde qui peut m'aider
Merci pour ton info
 
 
 

n°2311553
Lt Ripley
Ils ont tout niqué
Posté le 23-02-2018 à 20:40:08  profilanswer
 

Bah moi je créerais un compteur (int compteur = 0; ) incrémenté lors des repaint, puis, shématiquement :
 

Code :
  1. if (compteur = 0) {
  2.    g.setColor(Color.white);
  3.    g.fillRect(0, 0, this.getWidth(), this.getHeight());
  4. }


Message édité par Lt Ripley le 23-02-2018 à 20:41:03

---------------
Mes apps  |  Viens coder  |  Mon topal de vente
n°2311560
lolo1971
Posté le 24-02-2018 à 07:49:28  profilanswer
 

Salut,  
J'y ai pensé et j'ai essayé mais dès que la courbe se trace
Le fond de mon jpanel change  
Je vais tenter autre chose (calcul des coordonnées en tâche de fond)
Je pense pense que cela peut venir de là mon problème
Merci ripley pour ton aide

n°2311564
lolo1971
Posté le 24-02-2018 à 13:44:43  profilanswer
 

Salut ripley,  
 
 C'est bon mon problème est resolu
J'ai lancé dans un nouveau thread et cela fonctionne
Merci à toi

n°2311565
Lt Ripley
Ils ont tout niqué
Posté le 24-02-2018 à 14:03:52  profilanswer
 

[:nakawouet]


---------------
Mes apps  |  Viens coder  |  Mon topal de vente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Resolu repaint n'appele pas paintcomponentt

 

Sujets relatifs
repaint() & BorderLayout : bug d'affichage...Redirection de la console d'un programme appelé à l'appelant
Appel fonction Javascript dans variable PHPEvent lost focus appelé en boucle
Problème pour appelé une feuille & extraire des données sous excelSysteme d'appele d'offre
un form qui appele la page où il se trouveRMI : Appele de methode distante. un seule poste.
quelle page appele ma fonctionloadMovieNum ou loadMovie bloque le bon fonctionnement du swf appelé
Plus de sujets relatifs à : Resolu repaint n'appele pas paintcomponentt


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR