【问题标题】:How do I initialize a Graphics object in Java?如何在 Java 中初始化 Graphics 对象?
【发布时间】:2009-12-27 06:20:26
【问题描述】:

这是代码:

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 没有初始化。但是如何初始化一个抽象类呢?

【问题讨论】:

    标签: java class graphics abstract


    【解决方案1】:

    这里有两个问题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 处理,它实际上选择图形上下文,并为我们调用我们的绘制函数。但是,如果你愿意,你可以传入任何你想要的图形对象,并要求它在上面绘制。 (因此,如果您想将组件绘制到图像上,可以这样做)

    (注意,我把类名从 anim1 改成了 So1)

    【讨论】:

      【解决方案2】:

      applet 不需要像常规 Java 应用程序那样的 main 方法。我建议从Sun's Applets Tutorial 开始。特别是,您可能想跳到 Life Cycle of an Applet 部分,了解如何在小程序中处理 Graphics 对象。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 为了刷新显示,您可以在 anim1 对象的实例上调用方法 repaint()。
        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

          开始here 了解更多信息。

          【讨论】:

            【解决方案6】:

            你没有初始化一个 Graphics 对象。

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

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

            【讨论】:

              【解决方案7】:

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

              【讨论】:

                猜你喜欢
                • 2012-11-03
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-08-18
                • 2019-03-08
                • 1970-01-01
                相关资源
                最近更新 更多