2011-04-17 87 views
-3

這裏是我的代碼:這爲什麼不渲染?

import java.awt.*; 
    class g 
    { 
     public static void main(String arg[]) 
     { 
      System.out.println("hello"); 
      Rectangle rec=new Rectangle(4,4); 
      Graphics2D.draw(rec); 
     } 
    } 

當我嘗試編譯它,我得到這個:

非靜態方法平局(java.awt.Shape中)不能從靜態上下文

引用

這使我困惑。爲什麼會發生?如果Graphics2D是一個抽象類,Graphics2D.draw(shape s)如何可以是非靜態的?

+1

號是不是一種靜態方法。 http://download.oracle.com/javase/1.4.2/docs/api/java/awt/Graphics2D.html#draw(java.awt.Shape%29。嚴重的是,這是一個什麼樣的問題?你相信嗎?你的直覺比編譯器和文檔都多嗎? – 2011-04-17 18:21:41

+0

好吧,錯誤文字說明了一切必要。 – HalloDu 2011-04-17 18:22:20

+0

我誤讀了文檔實際上,對不起。 – David 2011-04-17 18:26:15

回答

4

如果Graphics2D.draw是靜態的,其中你會想到要繪製的矩形?顯示器的頂部左上角?當前活動的窗口?裏面有一個新的窗口?

Graphics2D.draw也不是一成不變的,因爲有很多圖形在上下文,你可以畫畫。向我們解釋其中您期望矩形被繪製,我們可以幫助您獲得適當的Graphics2D對象以滿足您的需求。

如果你想了解的圖形,你應該能夠做這樣的事情:

public class MyGraphicsFun { 

    public static void main(String[] args) { 
     JFrame frame = new JFrame(); 
     frame.setSize(800, 600); 
     frame.add(
       new JComponent() { 

        public Dimension getPreferredSize() { 
         return new Dimension(800, 600); 
        } 

        public void paintComponent(Graphics g) { 
         Graphics2D g2 = (Graphics2D) g; 
         g2.setColor(Color.RED); 
         // Any other drawing you want... 
        } 

       } 
      ); 
     frame.setVisible(true); 
    } 

} 

免責聲明:此代碼從內存中寫,所以它可能有錯誤

+0

我試圖學習圖形,所以我不知道我想做什麼?現在讓我說我的顯示器,但我的選擇是什麼? – David 2011-04-17 18:25:44

+0

@David:你可以畫到屏幕上,你可以繪製到一個窗口,你可以在一個窗口內繪製一個特定的組件(就像我的例子那樣),你可以繪製到內存中的緩衝區,你可以繪製到一個文件,你可以畫到一個X Windows會話...很多選項。:) – 2011-04-17 18:47:36

+0

爲了讓它編譯我不得不添加import javax.swing。* ; import java.awt。*;到頂端,然後當我運行它,我只是得到一個灰色的窗口,是所有它應該做的?感謝代碼示例btw。 – David 2011-04-17 22:26:59