问题描述
- 请大神帮忙看下,为什么MyPanel中的Paint方法没有被调用
-
package javademo;import javax.swing.*;
import java.awt.*;public class DrawDemo extends JFrame{
MyPanel mp = null; public static void main(String []args){ DrawDemo drawdemo = new DrawDemo(); } public DrawDemo(){ mp = new MyPanel(); this.add(mp); this.setSize(400, 400); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); }
}
class MyPanel extends JPanel {
//重写JPanel的Paint方法
//Graphics是绘图的重要类,你可以把它理解成一支画笔
public void Paint(Graphics g){
//调用父类函数完成初始化
//这句话不能少
super.paint(g);
System.out.println("321");
//先画一个圆圈
g.drawOval(10, 10, 40, 60);}
}
解决方案
补充说明,测试了下,的确是方法名称写错了。修正就好了。
import javax.swing.*;
import java.awt.*;
public class DrawDemo extends JFrame {
MyPanel mp = null;
public static void main(String[] args) {
DrawDemo drawdemo = new DrawDemo();
}
public DrawDemo() {
mp = new MyPanel();
this.add(mp);
this.setSize(400, 400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
class MyPanel extends JPanel {
// 重写JPanel的Paint方法
// Graphics是绘图的重要类,你可以把它理解成一支画笔
public void paint(Graphics g) {
// 调用父类函数完成初始化
// 这句话不能少
super.paint(g);
System.out.println("321");
// 先画一个圆圈
g.drawOval(10, 10, 40, 60);
}
}
解决方案二:
http://277754769.iteye.com/blog/1600501
解决方案三:
你自定义的组件需要按照自己的业务绘图的话,需要重写父类的paint方法,但是你写的是Paint(首字母大写了,就不是同一个方法了),方法名称错误,就不是同一个方法,当然不会被调用了。
本质上还是调用的是父类默认的paint。
敲代码的手误了,修正下试试呗。
解决方案四:
重写paint方法,,方法名一定要是一样的
时间: 2024-12-28 09:59:12