在这个程序中什么时候调用paint ?还有,为什么要扩展canvas


import java.awt.*;
import javax.swing.JFrame;
public class GraphicsDemo1 extends Canvas
{
    public void paint( Graphics g )
    {
        g.setColor(Color.green);
        g.drawRect(50,20,100,200);  // draw a rectangle
        g.fillOval(160,20,100,200); // draw a filled-in oval
        g.setColor(Color.blue);
        g.fillRect(200,400,200,20); // a filled-in rectangle
        g.drawOval(200,430,200,100);
        g.setColor(Color.black);
        g.drawString("Graphics are pretty neat.", 500, 100);
        int x = getWidth() / 2;
        int y = getHeight() / 2;
        g.drawString("The first letter of this string is at (" + x + "," + y + ")", x, y);
    }
    public static void main( String[] args )
    {
        // You can change the title or size here if you want.
        JFrame win = new JFrame("GraphicsDemo1");
        win.setSize(800,600);
        win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        GraphicsDemo1 canvas = new GraphicsDemo1();
        win.add( canvas );
        win.setVisible(true);
    }
}

谢谢。Awt和swing让我很困惑

为什么要扩展canvas?

因为写它的人选择了这么做。只有那些从Component扩展的类才能真正绘制到屏幕上,并且只有当它们附加到一个有效的,可见的窗口

在这个程序中何时调用paint ?

绘画是RepaintManager的责任。它将决定何时需要重新绘制组件,并在事件调度线程上调度重新绘制事件。这反过来调用(在您的情况下,update调用)paint代表您。

您可能需要阅读一下在AWT和Swing中绘画以获得更多关于该主题的详细信息

paint()在控件失效并需要重新绘制时调用。想象一下将应用部分移出屏幕,然后再移回来。Paint会被调用来重新绘制…

我认为可以扩展许多不同的控件来实现相同的目标,这基本上是创建一个自定义绘制的控件。对现有控件进行扩展,使其能够在其表面上绘图、放置在JFrame中、自动重新绘制等。

最新更新