为什么Swing默认'Graphics'而不是'Graphics2D'?

时间:2012-01-25 21:51:15

标签: java swing graphics graphics2d

如果Graphics2D中还包含所有Graphics,为什么它们不会默认为Graphics2D? 我似乎几乎总是在我的所有绘画覆盖中投射/创建一个Graphics2D对象。

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

1 个答案:

答案 0 :(得分:3)

仅支持Graphics的AWT兼容性。 Swing的组件扩展java.awt.Component,其getGraphics方法只返回Graphics个对象。在创建Swing时(Java 1.1 / 1.2),Java并不知道协方差。即使返回类型不是方法签名的一部分,也不允许使用具有不同(原始子类)返回类型的override方法。使用今天的语言功能,这是允许的,可能会以不同的方式完成,即返回类型将更改为Graphics2D。那时唯一的方法就是添加一个新方法(如getGraphics2D)或完全破坏与AWT的轻松互操作性。