2011-09-01 153 views
2

我試圖環顧四周,但無法理解如何在java中繪製圖形。讓我舉個例子。Java - 如何繪製圖形

比方說,我想創建一個自定義方法來填充一個三角形,它需要三個點作爲參數。如果我無法創建Graphics對象,如何使用metod fillPolygon(int [] xPoints,int [] yPoints,int nPoints)?

+1

參見:[2D摹raphics](http://download.oracle.com/javase/tutorial/2d/index.html)教程。 – mre

回答

2

你需要一個表面來繪製。通常這可以通過創建您自己的組件(通過擴展,例如在搖擺中的JPanel),然後覆蓋那裏的各種繪圖更新方法來完成。主要實現的是paintComponent,它獲取一個Graphics對象作爲參數傳入。

您通常也可以將您的Graphics對象轉換爲Graphics2D,這會爲您提供更豐富的繪製原語集。

+2

+1,覆蓋'paintComponent',而不是'paint'。 :D – mre

2

你應該明白的第一件事(也許你已經知道了)是Graphics是你寫的地方,而不是你寫的地方。大部分時間都是電腦屏幕,比如當你使用Swing時。

您還可以通過從BufferedImage.getGraphics獲得的Graphics書面直接繪製到一張空白圖:

Image myImage = new BufferedImage(...); 
Graphics graphImage = myImage.getGraphics(); 
graphImage.setColor(Color.BLUE); 
graphImage.fillPolygon(...); // set some blue pixels inside the BufferedImage 

你可以那麼圖像轉換成任何圖像格式。

現在愚蠢的例子,你不應該這樣做(見下文真正的Swing程序): 你可以在一個Swing組件繪製圖像

public class MyJPanel extends Panel { 

    @Override 
    public void paintComponent(Graphics g) { // g is your screen 
     ... 
     g.drawImage(myImage,...); // draw your image to the screen 
     ... 
    } 
} 

的標準Swing程序是直接寫屏幕:

public class MyJPanel extends Panel { 

    @Override 
    public void paintComponent(Graphics g) { // g is your screen 
     ... 
     g.fillPolygon(...); // directly writes your pixels to the screen buffer 
     ... 
    } 
} 

(註釋爲nitpickers:這是不完全正確,你直接寫屏幕緩衝區,因爲Swing是雙緩衝)

+0

下面是一個相關的[示例](https://sites.google.com/site/drjohnbmatthews/point-in-polygon)。 – trashgod