2012-01-25 47 views
3

我一直在考虑为我的一些项目制作自己的Java3D API。 (是的,我已经看到了Oracle提供的Java3D API。)定义了许多java.awt.Graphics中的方法,比如drawRect(),但是一些基本功能,比如drawLine(),是抽象的。在Graphics.java中没有实现时,如何创建Graphics对象(如下面的代码所示)?java.awt.Graphics中的方法在哪里定义?

public void paint(Graphics g) { 
    g.drawString("Hello World!"); 
} 

任何帮助或解释是非常感谢!提前致谢。

+0

这些原生的JRE实现。顺便说一句,这个例子并没有真正说明你的问题。 –

回答

3

这是特定于实现的,但这些方法通常是本地实现的,以便它们可以直接与本机窗口系统进行接口。您不能实例化一个Graphics对象,因为您想要使用的Graphics的具体实现可能是与本机系统交互的实现特定子类型Graphics。强制Java库和JVM实现者为您创建此对象可以防止您必须处理操作系统级细节的糟糕情况,并为图形包提供通用的,类型安全的接口。

如果你想实现自己的包,你可能必须使用JNI来实现一个图形包。然后,您可以在OpenGL,DirectX或任何其他您需要的系统上实现图形。

希望这会有所帮助!

0

[抄自我的评论:]这些都是由JRE本地实现的。

您可以创建一个缓冲图像,并得到一个图形对象吧:

BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); 
Graphics2D g2 = image.getGraphics(); 

参见:http://www.coderanch.com/t/345202/GUI/java/Create-Graphics-object

+1

我不认为这回答了这个问题。 OP的问题是当许多方法是抽象的时候'Graphics'是如何创建的,而不是如何获得现有'Graphics'对象的句柄。 – templatetypedef

+0

它回答了这个问题:'真'时,如何创建一个图形对象(如下面的代码所示)?但总是欢迎你放下我的答案。 –

相关问题