如何在Java中初始化Graphics对象?

这是代码:

import java.awt.*; import java.applet.*; public class anim1 extends Applet{ public void paint (Graphics g) { g.drawString("",400,300); } public static void main(String ad[]) { anim1 a=new anim1(); Graphics g1; a.paint(g1); } } 

它说g1没有初始化。 但是我如何初始化一个抽象类?

那么这里有两个问题1:

  Graphics g1; a.paint(g1); 

并且您收到G1未初始化的错误。 那是因为变量g1永远不会设置为任何东西,这会导致编译错误。 要获得编译代码,您至少需要这样做:

  Graphics g1 = null; a.paint(g1); 

但是,这显然不会帮助你太多。 当您尝试运行代码时,您将收到NullPointerException。 为了实际绘制你的图形,你需要这样:

  anim1 a=new anim1(); Graphics g1 = anim1.getGraphics(); a.paint(g1); 

但是,由于Anim1不会出现在屏幕上,因此仍然无效。 要让它出现在屏幕上,您需要以下内容:

 import java.awt.*; import javax.swing.*; import java.applet.*; public class So1 extends Applet{ public void paint (Graphics g) { g.drawString("hello",40,30); } public static void main(String ad[]) { JFrame jp1 = new JFrame(); So1 a=new So1 (); jp1.getContentPane().add(a, BorderLayout.CENTER); jp1.setSize(new Dimension(500,500)); jp1.setVisible(true); } } 

现在注意,我们实际上并没有自己调用paint()函数。 这是由awt处理的,它实际上选择了图形上下文,并为我们调用了paint函数。 但是,如果你想要,你可以传入你想要的任何图形对象,并要求它绘制它。 (所以如果你想将你的组件绘制到图像上,你可以这样做)

(注意,我将类名从anim1更改为So1)

applet不需要像常规Java应用程序那样的main方法。 我建议从Sun的Applets教程开始 。 特别是,您可能希望跳到Applet的生命周期部分,以了解如何在applet中处理Graphics对象。

您需要做的就是删除main方法,如下所示:

 import java.awt.*; import java.applet.*; public class anim1 extends Applet { public void paint (Graphics g) { g.drawString("Hello",100,100); } } 

而不是调用paint(Graphics g),你需要调用repaint或update方法。 但为此,您的类必须属于java.awt.Container中的层次结构。

对于您的类,您已经覆盖了Paint方法,并且在主要中您尝试调用paint方法。 您需要调用repaint或update方法(如果您的类位于java.awt.Container的层次结构中)而不是paint,而java的事件调度系统会调用您重写的paint方法本身。

您应该在paint方法中操作组件的图形并调用repaint()或update(),而不是直接调用paint方法。

从这里开始获取更多信息。

你没有初始化Graphics对象。

您可以通过Component#getGraphics()方法从组件中获取图形对象。

在你的特殊情况下,我认为repaint()就是你所需要的!

你没有,你使用getGraphics,但是,如果你真的想要初始化它,那么输入new Graphics(){}; 并填写所有抽象方法的乐趣。 大多数情况下只需要将代码放在paint(g)中就可以了,你需要记住将applet设置为可见,通常,它应该是构造函数中的最后一行,甚至在它之外,我曾经犯过一次错误使得可见,然后初始化了一堆变量,它显示了一段黑屏。