J'ai un Jdialog (maMachine) qui comporte un bouton (calcul), des JTextField
pour y entrer des paramètres, et un jpanel (ecran) pour afficher des
dessins.
Le fonctionnement est simple :
Entrer des paramètres puis presser calcul pour visualiser une courbe sur
l'écran de maMachine.
maMachine récupère les paramètres et les utilise pour calculer une courbe
sous forme d'une Liste de points (x,y).
maMachine passe ensuite la Liste à l'écran dont la méthode
paintComponent(Graphics g) a été surchargée pour dessiner la courbe.
Enfin maMachine appelle repaint()
La bizarrerie :
Si JDialog (maMachine) demande au JPanel (ecran) de se repeindre
( ecran.repaint() ) : les courbes successives se supperposent sur ecran.
Si JDialog (maMachine) se repeint lui même ( this.repaint() ) l'ancien
affichage du JPanel (écran) est remplacé par le nouveau.
Il y a surement une explication logique et je suis preneur.
--
Yvon
http://perso.numericable.fr/vertgalant/
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
ibiiztera
Le mardi 13 mars 2012 11:34:39 UTC+1, Yvon a écrit :
Bonjour.
J'ai un Jdialog (maMachine) qui comporte un bouton (calcul), des JTextFie ld pour y entrer des paramètres, et un jpanel (ecran) pour afficher des dessins.
Le fonctionnement est simple : Entrer des paramètres puis presser calcul pour visualiser une courbe su r l'écran de maMachine. maMachine récupère les paramètres et les utilise pour calculer une courbe sous forme d'une Liste de points (x,y). maMachine passe ensuite la Liste à l'écran dont la méthode paintComponent(Graphics g) a été surchargée pour dessiner la courbe . Enfin maMachine appelle repaint()
La bizarrerie : Si JDialog (maMachine) demande au JPanel (ecran) de se repeindre ( ecran.repaint() ) : les courbes successives se supperposent sur ecran. Si JDialog (maMachine) se repeint lui même ( this.repaint() ) l'ancien affichage du JPanel (écran) est remplacé par le nouveau.
oui il y a une explication et il me semble que c'est celle-ci: maMachine.repaint() repeint tous les composants à partir de rien. ecran.repaint() peindra les nouveaux points selon la méthode surchargée paintComponent(). S'il n'y a pas de 'efface ecran' explicite, les anciens points seront conservés et les nouveaux viendront s'ajouter. Je rajouterais dans ecran.paintComponent() en premier lieu: getGraphics().setColor(Color.White); getGraphics().fillRect(0,0,ecran.getWidth(),ecran.getHeight());
Mais donnez des détails sur l'implémentation, ca aidera au débogage.
Il y a surement une explication logique et je suis preneur. -- Yvon http://perso.numericable.fr/vertgalant/
Le mardi 13 mars 2012 11:34:39 UTC+1, Yvon a écrit :
Bonjour.
J'ai un Jdialog (maMachine) qui comporte un bouton (calcul), des JTextFie ld
pour y entrer des paramètres, et un jpanel (ecran) pour afficher des
dessins.
Le fonctionnement est simple :
Entrer des paramètres puis presser calcul pour visualiser une courbe su r
l'écran de maMachine.
maMachine récupère les paramètres et les utilise pour calculer une courbe
sous forme d'une Liste de points (x,y).
maMachine passe ensuite la Liste à l'écran dont la méthode
paintComponent(Graphics g) a été surchargée pour dessiner la courbe .
Enfin maMachine appelle repaint()
La bizarrerie :
Si JDialog (maMachine) demande au JPanel (ecran) de se repeindre
( ecran.repaint() ) : les courbes successives se supperposent sur ecran.
Si JDialog (maMachine) se repeint lui même ( this.repaint() ) l'ancien
affichage du JPanel (écran) est remplacé par le nouveau.
oui il y a une explication et il me semble que c'est celle-ci:
maMachine.repaint() repeint tous les composants à partir de rien.
ecran.repaint() peindra les nouveaux points selon la méthode surchargée paintComponent(). S'il n'y a pas de 'efface ecran' explicite, les anciens points seront conservés et les nouveaux viendront s'ajouter.
Je rajouterais dans ecran.paintComponent() en premier lieu:
getGraphics().setColor(Color.White);
getGraphics().fillRect(0,0,ecran.getWidth(),ecran.getHeight());
Mais donnez des détails sur l'implémentation, ca aidera au débogage.
Il y a surement une explication logique et je suis preneur.
--
Yvon
http://perso.numericable.fr/vertgalant/
Le mardi 13 mars 2012 11:34:39 UTC+1, Yvon a écrit :
Bonjour.
J'ai un Jdialog (maMachine) qui comporte un bouton (calcul), des JTextFie ld pour y entrer des paramètres, et un jpanel (ecran) pour afficher des dessins.
Le fonctionnement est simple : Entrer des paramètres puis presser calcul pour visualiser une courbe su r l'écran de maMachine. maMachine récupère les paramètres et les utilise pour calculer une courbe sous forme d'une Liste de points (x,y). maMachine passe ensuite la Liste à l'écran dont la méthode paintComponent(Graphics g) a été surchargée pour dessiner la courbe . Enfin maMachine appelle repaint()
La bizarrerie : Si JDialog (maMachine) demande au JPanel (ecran) de se repeindre ( ecran.repaint() ) : les courbes successives se supperposent sur ecran. Si JDialog (maMachine) se repeint lui même ( this.repaint() ) l'ancien affichage du JPanel (écran) est remplacé par le nouveau.
oui il y a une explication et il me semble que c'est celle-ci: maMachine.repaint() repeint tous les composants à partir de rien. ecran.repaint() peindra les nouveaux points selon la méthode surchargée paintComponent(). S'il n'y a pas de 'efface ecran' explicite, les anciens points seront conservés et les nouveaux viendront s'ajouter. Je rajouterais dans ecran.paintComponent() en premier lieu: getGraphics().setColor(Color.White); getGraphics().fillRect(0,0,ecran.getWidth(),ecran.getHeight());
Mais donnez des détails sur l'implémentation, ca aidera au débogage.
Il y a surement une explication logique et je suis preneur. -- Yvon http://perso.numericable.fr/vertgalant/
Yvon
ibiiztera wrote:
oui il y a une explication et il me semble que c'est celle-ci: maMachine.repaint() repeint tous les composants à partir de rien. ecran.repaint() peindra les nouveaux points selon la méthode surchargée paintComponent(). S'il n'y a pas de 'efface ecran' explicite, les anciens points seront conservés et les nouveaux viendront s'ajouter. Je rajouterais dans ecran.paintComponent() en premier lieu: getGraphics().setColor(Color.White); getGraphics().fillRect(0,0,ecran.getWidth(),ecran.getHeight());
Mais donnez des détails sur l'implémentation, ca aidera au débogage.
Bonsoir. Vous avez probablement raison. Quand on lit attentivement les spécifications il y a des différences subtiles pour le repaint() entre les conteneurs lourds et les légers. Mais c'est une lecture assez ésotérique que j'ai du mal à interpréter. Ceci dit ce n'est pas un bogue mais une erreur due au manque de connaissance du système : on approxime 20 fois sans problème et ça coince à la 21 ème quand les conditions sont un peu différentes.
J'ai récupéré 3 classes qui démontrent le problème, mais c'est encore un peu gros pour les news, je les envoie en pièces jointes par email. -- Yvon http://perso.numericable.fr/vertgalant/
ibiiztera wrote:
oui il y a une explication et il me semble que c'est celle-ci:
maMachine.repaint() repeint tous les composants à partir de rien.
ecran.repaint() peindra les nouveaux points selon la méthode surchargée
paintComponent(). S'il n'y a pas de 'efface ecran' explicite, les anciens
points seront conservés et les nouveaux viendront s'ajouter. Je
rajouterais dans ecran.paintComponent() en premier lieu:
getGraphics().setColor(Color.White);
getGraphics().fillRect(0,0,ecran.getWidth(),ecran.getHeight());
Mais donnez des détails sur l'implémentation, ca aidera au débogage.
Bonsoir.
Vous avez probablement raison. Quand on lit attentivement les spécifications
il y a des différences subtiles pour le repaint() entre les conteneurs
lourds et les légers. Mais c'est une lecture assez ésotérique que j'ai du
mal à interpréter.
Ceci dit ce n'est pas un bogue mais une erreur due au manque de connaissance
du système : on approxime 20 fois sans problème et ça coince à la 21 ème
quand les conditions sont un peu différentes.
J'ai récupéré 3 classes qui démontrent le problème, mais c'est encore un peu
gros pour les news, je les envoie en pièces jointes par email.
--
Yvon
http://perso.numericable.fr/vertgalant/
oui il y a une explication et il me semble que c'est celle-ci: maMachine.repaint() repeint tous les composants à partir de rien. ecran.repaint() peindra les nouveaux points selon la méthode surchargée paintComponent(). S'il n'y a pas de 'efface ecran' explicite, les anciens points seront conservés et les nouveaux viendront s'ajouter. Je rajouterais dans ecran.paintComponent() en premier lieu: getGraphics().setColor(Color.White); getGraphics().fillRect(0,0,ecran.getWidth(),ecran.getHeight());
Mais donnez des détails sur l'implémentation, ca aidera au débogage.
Bonsoir. Vous avez probablement raison. Quand on lit attentivement les spécifications il y a des différences subtiles pour le repaint() entre les conteneurs lourds et les légers. Mais c'est une lecture assez ésotérique que j'ai du mal à interpréter. Ceci dit ce n'est pas un bogue mais une erreur due au manque de connaissance du système : on approxime 20 fois sans problème et ça coince à la 21 ème quand les conditions sont un peu différentes.
J'ai récupéré 3 classes qui démontrent le problème, mais c'est encore un peu gros pour les news, je les envoie en pièces jointes par email. -- Yvon http://perso.numericable.fr/vertgalant/