2008-10-07 10 views
35

Angenommen wir verwenden immer eine Sun JVM (sagen wir 1,5+), ist es immer sicher, eine Graphics-Referenz auf Graphics2D zu übertragen?Java2D: Ist es immer sicher, Grafiken in Graphics2D zu konvertieren?

Ich habe noch nicht gesehen, dass es irgendwelche Probleme verursacht, und nach meinem Verständnis ist die Grafikklasse Legacy-Code, aber die Java-Designer wollten die Schnittstellen für Swing- und AWT-Klassen nicht ändern, um Abwärtskompatibilität zu erhalten.

Antwort

24

Nach der Diskussion here, es ist immer sicher Graphics-Graphics2D zu werfen. Allerdings kann ich die offizielle Sun-Erklärung dazu nicht schnell finden.

Der Grund, es gilt von Graphics Graphics2D zu werfen, ist, weil Sun gesagt haben, dass alle Grafiken von der API in Java 1.2 oder oben wird eine Unterklasse von Graphics2D zurückgegebenen Objekte.

Ein weiterer Hinweis here mit der gleichen Schlussfolgerung.

Grafikobjekt kann immer umgewandelt werden Graphics2D g2d = (Graphics2D) g;

+0

Danke für die Referenzen. Ich werde das akzeptieren, obwohl es nicht direkt eine Sun-Quelle anführt, weil ich denke, dass es nahe genug ist. –

+0

Wie ich mich erinnere, zeigen alle Sun-Dokumente immer die Besetzung für das Graphics2D-Zeug, also nehme ich an, dass es sicher ist. Wenn Sie wirklich pedantisch sein wollen, könnten Sie einen try/catch-Block verwenden, aber ich schätze, wenn Sie die Graphics2D-Klassen (JVM/libs neu genug) haben, sind Sie in Sicherheit. – MBCook

+0

Der erste Link ist tot – FDinoff

10

In dem Buch Filthy Rich Client von Chet Haase und Romain Guy sie sagen, dass Schwingen fast immer ein Graphics2D Objekt verwendet. Ausnahmen hiervon sind das Drucken und das Objekt DebugGraphics von Swing. Solange keine dieser Situationen auf Ihren Code zutrifft, können Sie ihn in Graphics2D übertragen.
Die beiden Autoren arbeiteten bei Sun, also würde ich annehmen, dass sie wissen, worüber sie reden.

6

Die 2D Graphics Trail sagt:

Um Java 2D-API-Funktionen in der Anwendung zu verwenden, warf die Grafik in eine Rendering-Methode der Komponente zu einem Graphics2D Objekt übergebene Objekt. Zum Beispiel:

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

Dies ist die „offizielle“ Quelle, die ich finden konnte. Wenn ich direkt von Suns Java-Tutorials komme, würde ich sagen, dass dies die offiziell sanktionierte Vorgehensweise ist. Ich hätte nicht genau gedacht, wenn die JavaDocs dies ausschrieben, obwohl ...

Verwandte Themen