package com.test;import java.awt.Graphics;
import javax.swing.JPanel;
public class GamePanel extends JPanel{ private static final long serialVersionUID = 1L;
public void display(){
          System.out.println("display");
          this.repaint();
          System.out.println("repaint()");
    }    @Override
    protected void paintComponent(Graphics g) {
        System.out.println("paintComponent");
    }
    public static void main(String[] args){
        GamePanel gamePanel = new GamePanel();
        gamePanel.display();
    }
}
repaint()方法不是会自动调用paintComponent方法吗?为什么我的上面一段程序,不调用paintComponent()方法呢?
请高手指教,先谢谢了~

解决方案 »

  1.   

    javax.swing.JComponent类 
    repaint()调用update() 
    update()调用paint() 
    paint()调用paintComponent(),paintBorder(),及paintChildren()自己搞定了,因为上面的代码,根本就没有开始显示JPanel,既然没有显示,怎么会调用paintComponent()呢?
    可以试试,调试下面一段代码用于理解~package com.test;
    import java.awt.Color;
    import java.awt.Graphics;import javax.swing.JFrame;
    import javax.swing.JPanel;public class GamePanel extends JPanel{ private static final long serialVersionUID = 1L;
    public GamePanel(){

    } public void display(){
    System.out.println("GmaePanel - display");

    this.repaint();
    } @Override
    protected void paintComponent(Graphics g) {

    System.out.println("GamePanel - ------------paintComponent");

    g.setColor(new Color(0xcfcfcf));
    }

    @Override
    public void paint(Graphics g) {
    System.out.println("GamePanel - ------------paint");
    super.paint(g);
    } @Override
    public void update(Graphics g) {
    System.out.println("GamePanel - ------------update");
    super.update(g);
    } public static void main(String[] args){
    JFrame frame = new JFrame();
    frame.setSize(300,300);
    GamePanel gp = new GamePanel();
    frame.add(gp);
    frame.setVisible(true);
    gp.display();
    }
    }