java - 这个程序什么时候调用paint?另外,为什么它扩展 Canvas ?

标签 java swing awt

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

最佳答案

why does it extend canvas?

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

When is paint called in this program?

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

您可能希望阅读 Painting in AWT and Swing有关该主题的更多详细信息

关于java - 这个程序什么时候调用paint?另外,为什么它扩展 Canvas ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15940012/

相关文章:

Java MVC : updating View that observes multiple Models

用于多个屏幕的 Java GUI 全屏

java - VertX 和 Log4j 无法获取配置

java - 使用 JNLP 启动 Applet 时找不到类异常

java - 在 foreach 循环中选择特定项目?

java - 将文件类型与 Java Swing 应用程序相关联

在选择器对话框中单击打开后,Java JFileChooser 打开备份

java - 两个标签位于中心的中间

java - 同一 JRE 中的 2 个应用程序从 java.awt.Desktop.isDesktopSupported() 获得不同的结果

java - 在多个 JVM 上维护单个实例