如何在没有在main方法中调用的情况下运行paint()?

Cor*_*rey 6 java graphics

这是使用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); 
    }
}
Run Code Online (Sandbox Code Playgroud)

主要方法中没有任何地方是在画布上调用paint().但是我运行程序并且它可以运行,那么paint()方法是如何运行的呢?

aio*_*obe 14

paint方法由Event Dispatch Thread(EDT)调用,基本上不受您的控制.

它的工作原理如下:当您实现用户界面(setVisible(true)在您的情况下调用)时,Swing启动EDT.然后,此EDT线程在后台运行,无论何时需要绘制组件,它都会paint使用适当的Graphics实例调用该方法以供绘制.

那么,什么时候需要重新绘制一个"需要"的组件? - 比如说什么时候

  • 窗口调整大小
  • 组件可见
  • 你打电话的时候 repaint
  • ...

简单地假设只要有必要就会调用它.


akh*_*ess 5

实际上你自己从不调用paint mathod.只要帧的内容窗格需要重新绘制,它就会自动调用.当您的帧第一次渲染,调整大小,最大化(在被最小化之后)等时会发生这种情况.