[Canvas] pb : ma méthode repaint() n'appelle pas mon paint() !

pb : ma méthode repaint() n'appelle pas mon paint() ! [Canvas] - Java - Programmation

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() ?
 

Code :
  1. public class test //extends une_classe_dont_jai_besoin  
  2. {
  3.     //contient une instance d'une classe fille de Canvas  
  4.     public Dessin dessin;
  5.     public test () {this.dessin = new Dessin ();}
  6.     static public void main (String args[]) {
  7.    test t = new test ();
  8.    t.dessin.repaint();
  9.    //je veux afficher le dessin  
  10.    java.awt.Frame frame = new java.awt.Frame ();
  11.    frame.add(t.dessin);
  12.    frame.setVisible(true);
  13.     }
  14. }
  15. class Dessin extends java.awt.Canvas {
  16.     public Dessin () {System.out.println("Constructeur Dessin" );}
  17.     public void paint (java.awt.Graphics g) {
  18.    System.out.println("je suis dans paint" );
  19.     }
  20. }


 
Ici la sortie n'affiche que "Constructeur Dessin".  
 
Merci !

Reply

Marsh Posté le 18-02-2004 à 18:03:20   

Reply

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.


---------------
trainoo.com, c'est fini
Reply

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\

Reply

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.


---------------
trainoo.com, c'est fini
Reply

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.

Reply

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());
}
}

Reply

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 !

Reply

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.


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

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.


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

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.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 20-02-2004 à 19:28:07   

Reply

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() ?


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

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.


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 23-02-2004 à 12:24:44    

Merci pour vos réponses :)

Reply

Sujets relatifs:

Leave a Replay

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