如果所有 Graphics
也包含在 Graphics2D
中,为什么他们不默认为 Graphics2D
?
我似乎几乎总是在我所有的绘画覆盖中转换/创建一个 Graphics2D
对象。
@Override
public void paintComponent(Graphics paramGraphics){
super.paintComponent(paramGraphics);
Graphics2D g = (Graphics2D) paramGraphics.create();
// RenderingHints etc.
}
最佳答案
与仅支持 Graphics
的 AWT 的兼容性。 Swing 的组件扩展了 java.awt.Component
,它有一个 getGraphics
方法,该方法只返回一个 Graphics
对象。在创建 Swing 时(Java 1.1/1.2)Java 不知道协变。即使返回类型不是方法签名的一部分,也不允许具有不同(原始子类)返回类型的重写方法。使用今天的语言功能,这是允许的,并且可能会以不同的方式完成,即返回类型将更改为 Graphics2D
。当时唯一的方法是要么添加一个新方法(如 getGraphics2D
),要么完全破坏与 AWT 的轻松互操作性。
关于java - 为什么 Swing 默认为 'Graphics' 而不是 'Graphics2D' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9010838/