2012-01-25 32 views
3

如果所有Graphics也包含在Graphics2D中,爲什麼他們不會默認爲Graphics2D
我似乎幾乎總是在我的所有繪畫替代品中投射/創建一個Graphics2D對象。Swing爲什麼默認'Graphics'而不是'Graphics2D'?

@Override 
public void paintComponent(Graphics paramGraphics){ 
    super.paintComponent(paramGraphics); 
    Graphics2D g = (Graphics2D) paramGraphics.create(); 
    // RenderingHints etc. 
} 
+0

並非所有的圖形實際上都保證是Graphics2D。是的,就是這樣,我相信如果你正在畫屏幕,但是如果你打印的話它可能不是(我相信)總是如此。 –

回答

3

與僅支持的AWT的兼容性。 Swing的組件擴展爲java.awt.Component,該方法的getGraphics方法僅返回Graphics對象。在Swing創建時(Java 1.1/1.2),Java不知道協方差。即使返回類型不是方法簽名的一部分,也不允許使用不同(原始類型的)返回類型的重寫方法。有了今天的語言功能,這是允許的,可能會有不同的做法,即返回類型將更改爲Graphics2D。那時唯一的辦法是添加一個新方法(如getGraphics2D)或者完全打破與AWT的簡單互操作性。

+0

即使在1.7中,也不能有一個逆變參數,這是您可能最經常看到的其中一個參數。對於更具體的返回類型,'create2D'之類的可以完成這個訣竅。 –

相關問題