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

标签 java swing graphics graphics2d

如果所有 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/

相关文章:

java - Dagger 2 : How to inject Map<Class<? extends Foo>, Provider<?扩展 Foo>>

java - 重新验证和重新绘制 - Java 6

java - 当满足某些条件时,如何忽略客户端程序可能添加的任何 KeyListener?

java - Java 中数组的微妙行为

java - JVM 如何通过 JIT 运行 Java 应用程序生成的机器代码?

java - 窗口的内容在最小化时消失

java - 双数组丢失信息

java - 使用 Java 图形 API 的数字线

c - 用 C 将位图样式字体绘制到显示缓冲区的算法

javascript - 在d3中,如何从SVG线中获取插值线数据?