Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java2D: Is it always safe to cast Graphics into Graphics2D

Tags:

java

java-2d

Assuming we always use a Sun JVM (say, 1.5+), is it always safe to cast a Graphics reference to Graphics2D?

I haven't seen it cause any problems yet and, to my understanding, the Graphics class is legacy code but the Java designers didn't want to change the interfaces for Swing and AWT classes in order to preserver backwards compatibility.

like image 421
Outlaw Programmer Avatar asked Oct 07 '08 16:10

Outlaw Programmer


People also ask

How does Graphics2D work?

This Graphics2D class extends the Graphics class to provide more sophisticated control over geometry, coordinate transformations, color management, and text layout. This is the fundamental class for rendering 2-dimensional shapes, text and images on the Java(tm) platform.


3 Answers

According to the discussion here, it is always safe to cast from Graphics to Graphics2D. However I am not able to quickly find the official Sun statement on this.

The reason it is valid to cast from Graphics to Graphics2D, is because Sun have said that all Graphics objects returned by the API in Java 1.2 or above will be a subclass of Graphics2D.

Another hint here with the same conclusion.

Graphics Object can always be cast Graphics2D g2d = (Graphics2D)g;

like image 90
Jorge Ferreira Avatar answered Oct 24 '22 15:10

Jorge Ferreira


In the book Filthy Rich Client by Chet Haase and Romain Guy they are saying that Swing almost always uses a Graphics2D object. Exceptions from this are printing and Swing's DebugGraphics object. So as long as none of these situations apply to your code it is safe to cast to Graphics2D.
Both of the authors worked at Sun, so I would assume that they know what they are talking about.

like image 43
Roland Schneider Avatar answered Oct 24 '22 13:10

Roland Schneider


The 2D Graphics Trail says:

To employ Java 2D API features in the application, cast the Graphics object passed into a component’s rendering method to a Graphics2D object. For example:

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

This is the most "official" source I could find. Coming straight from Sun's Java Tutorials, I'd say that this is the officially sanctioned way of doing it. I wouldn't have exactly minded if the JavaDocs spelled this out, though...

like image 7
MathiasKegelmann Avatar answered Oct 24 '22 13:10

MathiasKegelmann