假设我们总是使用Sun JVM(比如1.5+),那么将Graphics引用转换为Graphics2D总是安全的吗?
我还没有看到它导致任何问题,据我所知,Graphics类是遗留代码,但Java设计者不想更改Swing和AWT类的接口以保持向后兼容性。 / p>
答案 0 :(得分:26)
根据讨论here,始终可以安全地从Graphics
投射到Graphics2D
。但是,我无法快速找到Sun的正式声明。
从中投射有效的原因 图形到Graphics2D,是因为Sun 已经说过所有Graphics对象了 由Java 1.2或Java中的API返回 上面将是一个子类 的Graphics2D。
另一个暗示here有相同的结论。
始终可以投射图形对象 Graphics2D g2d =(Graphics2D)g;
答案 1 :(得分:10)
在Chet Haase和Romain Guy的书Filthy Rich Client中,他们说Swing几乎总是使用Graphics2D
个对象。例外情况是打印和Swing的DebugGraphics
对象。因此,只要这些情况都不适用于您的代码,就可以安全地转换为Graphics2D
两位作者都在Sun工作,所以我认为他们知道他们在谈论什么。
答案 2 :(得分:6)
要在应用程序中使用Java 2D API功能,请将传递到组件渲染方法的Graphics对象强制转换为Graphics2D对象。例如:
public void paint (Graphics g) {
Graphics2D g2 = (Graphics2D) g;
...
}
这是我能找到的最“官方”的来源。直接来自Sun的Java教程,我会说这是官方认可的方式。如果JavaDocs拼写出来,我不会完全明白,但是......