Java究竟是如何以及何时调用paint()方法的?

时间:2017-05-30 18:30:07

标签: java swing jframe paint

我多次被告知当我将类扩展到JFrame时,paint()方法将被调用,例如。在代码中没有调用paint方法,我也没有看到任何绘制的矩形。

我甚至尝试在构造函数(我创建的)中调用paint方法,然后在main中为类创建一个obejct但是我得到了一个N​​ullPointerException

import java.awt.Graphics;
import javax.swing.JFrame;

public class MyFirstDrawing extends JFrame
{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    public static void main(String args[])
    {
        JFrame w = new JFrame("Hello World");
        w.setTitle("My First Drawing");
        w.setDefaultCloseOperation(EXIT_ON_CLOSE);
        w.setSize(500,500);
        w.setVisible(true);
    }
    public void paint(Graphics g)
    {
        g.drawRect(40, 40, 100, 200);
    }
}

1 个答案:

答案 0 :(得分:2)

你有两个框架:

  1. 扩展JFrame并覆盖paint()方法,但该框架永远不可见,因此永远不会调用paint()方法。

  2. 然后你创建一个可见的新JFrame,但是这个框架没有自定义绘画,所以你只看到框架。

  3. 无论如何,这不是自定义绘画的方式。通过覆盖JPanel的paintCompnent(...)来完成自定义绘制,然后将面板添加到框架中。阅读Custom Painting上Swing教程中的部分,了解可以自定义的更多信息和工作示例。

    教程示例将向您展示创建类的更好方法,因此无需扩展JFrame。按照教程示例进行操作。