【问题标题】:Why does Swing default 'Graphics' and not 'Graphics2D'?为什么 Swing 默认为“Graphics”而不是“Graphics2D”?
【发布时间】:2012-01-25 21:51:15
【问题描述】:

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

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

【问题讨论】:

  • 并非所有图形实际上都保证是 Graphics2D。是的,就是这样,我相信如果你在屏幕上绘图,但如果你在打印它,它可能(我相信)并不总是这样。

标签: java swing graphics graphics2d


【解决方案1】:

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

【讨论】:

  • 即使在 1.7 中你也不能有一个逆变参数,这可能是你最常看到的 ye olde (1D?) Graphics。对于更具体的返回类型,create2D 之类的就可以了。
猜你喜欢
  • 2019-01-11
  • 1970-01-01
  • 2015-04-12
  • 1970-01-01
  • 2010-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多