gpt4 book ai didi

java - 没有在 main 方法中调用 paint() 如何运行?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:41:07 24 4
gpt4 key购买 nike

这是一个使用 awt 包的 java 图形的初学者问题。我在网上找到这段代码来绘制一些简单的图形。

import java.awt.*;
public class SimpleGraphics extends Canvas{

/**
* @param args
*/
public static void main(String[] args) {
SimpleGraphics c = new SimpleGraphics();
c.setBackground(Color.white);
c.setSize(250, 250);

Frame f = new Frame();
f.add(c);
f.setLayout(new FlowLayout());
f.setSize(350,350);
f.setVisible(true);
}
public void paint(Graphics g){
g.setColor(Color.blue);
g.drawLine(30, 30, 80, 80);
g.drawRect(20, 150, 100, 100);
g.fillRect(20, 150, 100, 100);
g.fillOval(150, 20, 100, 100);
}
}

main 方法中没有在 Canvas 上调用 paint() 的地方。但是我运行了程序并且它工作了,那么 paint() 方法是如何运行的呢?

最佳答案

paint 方法由事件调度线程 (EDT) 调用,基本上不受您的控制。

它的工作方式如下:当您实现一个用户界面(在您的情况下调用setVisible(true))时,Swing 启动EDT。然后这个 EDT 线程在后台运行,每当您的组件需要绘制时,它会调用 paint 方法,并使用适当的 Graphics 实例供您用于绘制。

那么,什么时候“需要”重绘一个组件呢? -- 例如当

  • 窗口大小调整
  • 组件可见
  • 当你调用repaint
  • ...

只需假设它在必要时被调用。

关于java - 没有在 main 方法中调用 paint() 如何运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7764602/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com