2011-04-17 88 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