paint() update() repaint() paintComponent()这些方法是怎么自动调用的?
什么时候需重写?怎么重写?这个问题困扰我一个星期了,查了好多书都没有写清楚.比例下面这个程序在窗口里画一个椭圆,伸缩大小或最大化窗口,怎么椭圆就没有了,最小化又最大化又出来了.
总之你自己实验一下.一定要试一下.到底这些方法是怎么个调用法的?我们要改变它的动作时怎么重写?import java.awt.Color;
import java.awt.Graphics;
import javax.swing.*;public class FrameDraw extends JFrame{ public void paint(Graphics g){
g.fillOval(50, 50, 200, 300);

}
public static void main(String[] args) {
FrameDraw fd = new FrameDraw();
fd.setSize(400, 400);
fd.setVisible(true);
fd.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }}

解决方案 »

  1.   

    你应该继承一个JPanel类,复写其paintComponent方法,把你 要绘制图像的代码写在其中.
    然后把这个panel添加到JFrame中去.
      

  2.   

    在Swing关于显示有一个大总管:RepaintManager,它负责调用各个method来显示组件。
    在Swing中update()等同于paint(),在Swing中update()没用,它的存在仅仅是为了与AWT的相似。paint()的作用与AWT中的paint()也完全不一样,而且工作机制比较复杂,我也说不很清楚,好像涉及到脏区(dirty region)、paintImmediately()、paintWithBuffer()等等,反正比较头疼。还好一般不用它,只有研究Swing机制的人才有工夫慢慢去研究吧,呵呵~~JComponet中有三个repaint(),两个自己定义的,带参数。一个继承自java.awt.Container,不带参数。
    调用repaint()将整个组件重新显示。paintComponent()主要是调用UI delegate(参考Swing的MVC结构)中的方法来显示组件。一般我们主要是重载它来定制我们的组件外观。所以,说来说去,搞明白paintComponent()就行了,其他的,呵呵,平时就当它们不存在吧~~
      

  3.   

    package tmp;import java.awt.Color;
    import java.awt.Graphics;
    import javax.swing.*;public class FrameDraw extends JFrame{
        public static void main(String[]   args)   {
            FrameDraw fd = new FrameDraw();
            fd.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        fd.getContentPane().add(new JPanel() {
                public   void   paintComponent(Graphics   g) {
                    super.paintComponent(g);
                    g.fillOval(50,   50,   200,   300);
                }
            });
            fd.setSize(400,   400);
            fd.setVisible(true);
        }
      

  4.   

    在paintComponent方法中的第一行写super.paintComponent(g);的作用:清除面板中的内容,也就是重绘;(说的简单点也就是,当你在JPanel中画了许多图形,在调用paintComponent方法时,super.paintComponent(g);会将JPanel中的这些图形全部清除,然后再重新绘制。)
    楼主说的repaint()方法:我们在适当的地方调用repaint()方法,此方法会自动调用paintComponent方法,所以我们无需对paintComponent方法进行明显的调用。