1
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 让我很困惑。

4

2 回答 2

3

为什么它会扩展画布?

因为曾经写过它的人选择这样做。只有那些扩展自的类Component才能真正绘制到屏幕上,并且只有当它们附加到有效的可见窗口时

这个程序什么时候调用paint?

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

您可能想阅读AWT 和 Swing中的绘画以了解有关该主题的更多详细信息

于 2013-04-11T03:12:20.653 回答
1

每当控件无效并需要重新绘制自身时,都会调用paint()。考虑将应用程序部分移出屏幕然后返回。油漆会被要求重绘......

我想可以扩展许多不同的控件来实现相同的目标,即创建一个自定义绘制的控件。扩展现有控件以获得在其表面上绘图、放置在 JFrame 中、自动重新绘制等的能力。

于 2013-04-11T03:07:45.787 回答