2012-01-25 65 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

它回答了這個問題:'真'時,如何創建一個圖形對象(如下面的代碼所示)?但總是歡迎你放下我的答案。 –

相關問題