public class MyPanel extends JPanel{
public void paintComponent(Graphics g)
{
super.paintComponent(g);//这句有啥用,去掉也得啊
g.drawString("Hello World!",160,20);
g.setColor(Color.blue);
g.fillRect(160,40,60,60);
}
}
还有,我用paint函数也可以,到底这两函数有啥区别呢?
还有,如果我去掉super那句后,然后设置JPanel控件背景色: JPanel2=new MyPanel(); JPanel2.setBackground(Color.green); 好像改变不了颜色。
2009-09-20 20:39
提问者采纳
super.paintComponent(g)是父类JPanel里的方法,会把整个面板用背景色重画一遍,起到清屏的作用 awt控件中是在paint方法进行绘制, 所以在awt控件继承时,只要简单的覆盖paint方法就可以了。 而在swing控件中,paint方法会依次调用paintcomponent, paintborder, paintchildren三个方法,后两者一般默认即可,所以swing编程时,如果继承jcomponent或者其子类,要覆盖paintcomponent而不是paint方法,这个在sun的教程中有说,jdk源程序中也可以很容易的看出来。
本文详细解析了 Java 中 paintComponent 函数的作用及其与 paint 方法的区别,通过实例展示了如何在自定义组件中使用该函数进行绘图操作,并讨论了在 Swing 控件中覆盖 paintComponent 的必要性。

836

被折叠的 条评论
为什么被折叠?



