pb : ma méthode repaint() n'appelle pas mon paint() ! [Canvas] - Java - Programmation
Marsh Posté le 18-02-2004 à 18:37:33
1) Heu, t'es sûr(e) de pas vouloir faire du swing plutôt que du AWT ? Tu auras une doc complète, de l'aide et un système plus puissant.
2) on appelle jamais une méthode de peinture à la main, c'est le gestionnaire d'événements qui le fait.
3) il faudrait peut-être appeller super.paint() dans ton paint(), comme marqué dans la doc
http://java.sun.com/j2se/1.4.2/doc [...] .Graphics)
4) je ne sais pas quel est la layout que tu lui a donné, mais je soupçonne ton composant d'avoir une taille de 0x0 en haut à gauche de ta frame.
5) Je ne comprends pas que le "frame.setVisible(true)" n'appelle pas les fonctions de peinture de ton composant.
Marsh Posté le 18-02-2004 à 21:28:28
Alors :
1\oui je fais du swing d'habitude, mais le problème est le même.
2\je peux l'appeller suite à un événement, mais le problème est là encore le même; j'ai fais l'appel à la main pour être certain qu'il serait executé.
3\merci je vais essayer ça.
4\ça ne devrait pas avoir d'importance dans notre problème, si ?
5\...
Bon merci, je vais essayer le 3\
Marsh Posté le 18-02-2004 à 21:39:30
Je suis au regret de te dire qu'il n'y a aucune (bon disons infime, à cause du coup de l'exception) chance que le 3) résolve ton problème.
Marsh Posté le 19-02-2004 à 10:03:19
En fait ouais c'est clair, vu que le paint() n'est pas appellé du tout.
Marsh Posté le 19-02-2004 à 22:10:15
ben tu ajoutes bêtement dans le code de Dessin :
public void repaint() {
if (getGraphics() != null) {
this.paint(getGraphics());
}
}
Marsh Posté le 20-02-2004 à 19:09:50
Je savais pas qu'on pouvait obtenir le Graphics associé à la class courante aussi facilement; merci !
Marsh Posté le 20-02-2004 à 19:24:51
nraynaud a écrit : 2) on appelle jamais une méthode de peinture à la main, c'est le gestionnaire d'événements qui le fait. |
On appelle jamais paint() à la main, mais appeler repaint() c'est tout à fait normal.
Marsh Posté le 20-02-2004 à 19:26:29
Ah au fait : repaint n'appellera paint() que si il y a qqchose à dessiner : toi tu l'appelle avant d'afficher la Frame, donc ton composant n'est pas visible, donc il n'y a aucun objet Graphics associé, donc paint() n'est pas appelé, c'est normal.
Marsh Posté le 20-02-2004 à 19:28:07
R3g a écrit : On appelle jamais paint() à la main, mais appeler repaint() c'est tout à fait normal. |
bah oui, en dehors de la boucle de répartition des événements en plus c'est la fête.
Marsh Posté le 20-02-2004 à 19:32:20
nraynaud a écrit : bah oui, en dehors de la boucle de répartition des événements en plus c'est la fête. |
Imagine un composant chargé d'afficher une image. Il contient une référence vers un objet Image et dessine celle-ci sur lui-même dans son paint(). Tu changes l'image à afficher ; comment tu dis au composant de se mettre à jour sans appeler repaint() ?
Marsh Posté le 20-02-2004 à 19:35:47
http://java.sun.com/products/jfc/t [...] html#smart
Citation : Programs may trigger a future call to paint() by invoking repaint(), but shouldn't call paint() directly. |
Marsh Posté le 18-02-2004 à 18:03:20
Salut à tous, comment faire dans ce code pour que mon repaint() appelle bien la méthode paint() ?
Ici la sortie n'affiche que "Constructeur Dessin".
Merci !