这为什么不渲染?
这里是我的代码:这为什么不渲染?
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)如何可以是非静态的?
如果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 2011-04-17 18:25:44
@David:你可以画到屏幕上,你可以绘制到一个窗口,你可以在一个窗口内绘制一个特定的组件(就像我的例子那样),你可以绘制到内存中的缓冲区,你可以绘制到一个文件,你可以画到一个X Windows会话...很多选项。:) – 2011-04-17 18:47:36
为了让它编译我不得不添加import javax.swing。* ; import java.awt。*;到顶端,然后当我运行它,我只是得到一个灰色的窗口,是所有它应该做的?感谢代码示例btw。 – David 2011-04-17 22:26:59
在此的javadoc:
http://download.oracle.com/javase/6/docs/api/
你找哪一个在哪里?
此外,你为什么不相信编译器?如果你永远无法通过编译器,你有什么不同意见?只要做它说的并且继续下去。
你听起来像一个迷失的灵魂。开始与这个:
号是不是一种静态方法。 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
好吧,错误文字说明了一切必要。 – HalloDu 2011-04-17 18:22:20
我误读了文档实际上,对不起。 – David 2011-04-17 18:26:15