37 votes

Java2D : Est-il toujours sûr de convertir Graphics en Graphics2D ?

Si l'on suppose que l'on utilise toujours une JVM Sun (disons 1.5+), est-il toujours sûr de convertir une référence Graphics en Graphics2D ?

Je ne l'ai pas encore vu causer de problèmes et, d'après ce que j'ai compris, la classe Graphics est un code hérité mais les concepteurs de Java n'ont pas voulu modifier les interfaces des classes Swing et AWT afin de préserver la rétrocompatibilité.

26voto

smink Points 39640

Selon ce type ici est toujours sûr de lancer à partir de Graphics à Graphics2D . Cependant, je ne suis pas en mesure de trouver rapidement la déclaration officielle de Sun à ce sujet.

La raison pour laquelle il est valable de passer de Graphics à Graphics2D, c'est parce que Sun a déclaré que tous les objets Graphics renvoyés par l'API dans Java 1.2 ou supérieur ou plus, seront une sous-classe de Graphics2D.

Un autre indice ici avec la même conclusion.

L'objet graphique peut toujours être coulé Graphics2D g2d = (Graphics2D)g ;

10voto

Roland Points 1848

Dans le livre Filthy Rich Client par Chet Haase et Romain Guy, ils disent que Swing utilise presque toujours une Graphics2D objet. Les exceptions à cette règle sont l'impression et la méthode Swing DebugGraphics objet. Ainsi, tant qu'aucune de ces situations ne s'applique à votre code, vous pouvez sans risque effectuer un cast vers l'objet Graphics2D .
Les deux auteurs ont travaillé chez Sun, je suppose donc qu'ils savent de quoi ils parlent.

6voto

Le site Piste graphique 2D dit :

Pour utiliser les fonctionnalités de l'API Java 2D dans l'application, convertissez l'objet Graphics transmis à la méthode de rendu d'un composant en un objet Graphics2D. Par exemple :

public void paint (Graphics g) {
    Graphics2D g2 = (Graphics2D) g;
    ...
}

C'est la source la plus "officielle" que j'ai pu trouver. Venant directement des Sun's Java Tutorials, je dirais que c'est la façon officielle de faire. Cela ne m'aurait pas vraiment dérangé si les JavaDocs l'avaient précisé, cependant...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X