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()方法呢?
请高手指教,先谢谢了~
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();
}
}