2012-01-25 34 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'之类的可以完成这个诀窍。 –

相关问题