Probleme de cast en java

bonjour a tous,
j’ai un probleme de cast en programmation java; voila le probleme
Je voudrais imprimer un objet nomme DrawPanel ( extends JPanel)
lors de la construction de cet objet, je developpe la fonction
paintComponent{
super.paintComponent(g);

Graphics2D g2 = (Graphics2D)g;

g2.draw…

}

en gros , je fait un cast classique de Graphics pour pouvoir dessiner "joliment"
Cependant lorsque je veux imprimer cet objet le message suivant apparait dans ma console:
Exception in thread "awt-EventQueue-0" java.lang.ClassCastException : sun.print.printProxyGraphics
at DrawPanel.paintComponent(DrawPanel.java:157)
at javax.swing.JComponent.PrintComponent(Jcomponent.java:1121)

a la ligne 157 de la classe DrawPanel correspond la ligne du cast que j’ai ecris precedent
Graphics2D g2=(Graphics2D)g;

j’ai fait quelques recherches sur internet avant de faire appel a vous et voila tout ce que j’ai trouve:

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5045936

seulement ca me dit juste qu’il y a un bug (je m’en etais apercu!!!) mais ca ne m’explique pas comment regler le probleme…
en esperant avoir ete assez clair , j’attend un petit coup de main de votre part.
merci d’avance
mat_zeus

Bonjour,
Est-ce que tu es sûr d’avoir besoin des méthodes de Graphics2D? parce qu’il y a déjà des méthodes draw… sur la classe Graphics, et si ce sont ces méthodes que tu appelle, le fait de caster n’ajoute rien.
Sinon, le bug est marqué “fix” pour la version 1.5… donc si tu peux, passe à cette version.

tout d’abord merci pour ta reponse.

Oui j’ai besoin de caster en Graphics 2D car je dois ecrire en donnant des angles au texte (ecriture vertical et avec d’autres angles…)
j’utilise egalement la version jdk 1.5 …
Donc la je suis vraiment bloqué!

si tu vois une autre solution n’hesite pas a me le dire…
merci
mat

Bonjour,
Bon, je suis loin d’être au point en swing, mais je te donne quelques idées en vrac:

  • voir les sources de sun (toutes les sources en java.awt sont visible): peut-être qu’il y a une des méthodes, ou un autre container que JPanel qui donne la bonne implémentation de Graphics, je suppose que tu le prennait déjà par getGraphics?

  • forcer ta propre implémentation de Graphics: dans la hiérarchie de classe de sun, j’ai trouvé ça:
    sun.awt.image.BufferedImageGraphics2D(BufferedImage, Component)
    comme c’est du sun.awt, il n’y a pas le source de cette classe, mais elle implémente Graphics2D, et il doit y avoir moyen de passer la bonne BufferedImage et le bon component pour que ça marche…

:slight_smile:

merci mec,
je vais essayer tout ca et je te tiens au courant si ca t’interesse…
a bientot
mat

bon alors g passe toute ma journee a fouiller enfin de pouvoir trouver une solution et la je coince encore…
pour ce qui est de sun.awt.inage.buferredImage(…)
je n’ai rien trouve …si tu pouvais me donner un lien…
j’ai tente egalement d’ecrire mon JPanel sur un bufferredImage et de faire un drawImage ensuite…mais il y a toujours ce pb de cast…
je pense que ca vient peut etre du fait que je fais tout mon dessin dans le paintComponent(Graphics g)…
Qu’en pense tu, qu’en pensez vous …me trompe-je?
en tout cas j’attend des nouvelles avec impatience…
mat

Tu es en train de repeindre le composant, c’est ça?

Normalement c’est la méthode paint qu’il faut redéfinir, et celle-là renvoie effectivement un Graphics2D.