0

我对java有点陌生。我正在阅读 java 代码以了解更多信息,这让我感到困惑。一个方法只有在被调用时才会被执行,对吧?但是那些内置类的方法,如paint()Runnable中的, paintComponent(),等等。这些方法是否在没有显式调用它们的情况下执行,一旦实现这些方法的类用于实例化对象?真的是这样吗?run()

就像在这段代码中一样,方法paint()并没有真正被调用。

import javax.swing.*;
import java.awt.*;

public class FrameExampleTest{
    public static void main(String args[]){
        FrameExample frame = new FrameExample();
        frame.setSize(500,500);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

class FrameExample extends JFrame{
    PanelExample panel;
    public FrameExample(){
        Container c = getContentPane();
        panel = new PanelExample();
        c.add(panel,BorderLayout.CENTER);
    }
}

class PanelExample extends JPanel{
    public PanelExample(){
        setSize(300,200);
    }

    public void paint(Graphics g){
        g.fillArc(20,20,30,30,0,360);
    }
}
4

2 回答 2

2

您不会自己调用paint 或run,但JVM 中的其他代码会为您调用它。例如 Thread 类中的代码将调用您的 run 方法。事件循环内的代码将调用paint 或paintComponent。随着时间的推移,你会发现没有什么神奇的。每当调用一个方法时,其他一些代码都会调用它。

于 2013-09-23T11:12:18.783 回答
1

是的。窗口框架为您调用paintpaintComponent方法。它计算出何时需要绘制/重新绘制(例如,何时移动、打开、重新打开、调整大小等)。这些方法的 Javadoc 有时会提到不建议/不需要直接调用它们,但需要实现它们来做这样那样的事情。

于 2013-09-23T11:12:40.017 回答