Java 为什么这个不能渲染?

Java 为什么这个不能渲染?,java,2d,Java,2d,这是我的密码: import java.awt.*; class g { public static void main(String arg[]) { System.out.println("hello"); Rectangle rec=new Rectangle(4,4); Graphics2D.draw(rec); } } 当我尝试

这是我的密码:

import java.awt.*; 
    class g
    { 
        public static void main(String arg[]) 
        { 
            System.out.println("hello"); 
            Rectangle rec=new Rectangle(4,4); 
            Graphics2D.draw(rec); 
        }
    }
当我尝试编译它时,我得到以下结果:

无法从静态上下文引用非静态方法drawjava.awt.Shape

这使我困惑。为什么会发生这种情况?如果Graphics2D是一个抽象类,Graphics2D.drawshape怎么可能是非静态的

不在此javadocs中:

你在看哪一个

另外,你为什么不相信编译器?如果你永远都无法通过编译器,那么不同意有什么意义呢?照上面说的去做,继续做下去

你听起来像个迷失的灵魂。从这个开始:

如果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);
    }

}

免责声明:此代码是从内存编写的,因此可能有错误

否。它不是静态方法。说真的,这是什么问题?比起编译器和文档,你更相信你的直觉吗?嗯,错误文本说明了所有必要的东西。事实上,对不起,我误读了文档。我试图学习图形,所以我不确定我想做什么?比如说我现在的班长。我的选项是什么?@David:你可以画到屏幕,你可以画到窗口,你可以像我的例子那样画到窗口中的特定组件,你可以画到内存缓冲区,你可以画到文件,你可以画到X Windows会话。。。有很多选择为了让它编译,我必须添加import javax.swing.*;导入java.awt.*;到了顶端,当我运行它时,我只得到一个灰色的窗口,这就是它应该做的吗?顺便说一句,谢谢你的代码示例。@David:是的,它只画了一个灰色的窗口。但现在,那个窗口就是你的画布。您可以在g2上调用方法,它们应该出现在该窗口中。@David:Replace//您需要的任何其他图形。。。使用您自己的代码。例如,您可以将g2.DrawNewRectangle4、4;在那里,它应该画一个小矩形。如果这不起作用,请尝试一个更大的矩形。