请大神帮忙看下,为什么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);

}

}

4个回答

补充说明,测试了下,的确是方法名称写错了。修正就好了。

 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);
    }

}
txh3955
txh3955 谢谢!
接近 4 年之前 回复

你自定义的组件需要按照自己的业务绘图的话,需要重写父类的paint方法,但是你写的是Paint(首字母大写了,就不是同一个方法了),方法名称错误,就不是同一个方法,当然不会被调用了。
本质上还是调用的是父类默认的paint。
敲代码的手误了,修正下试试呗。

重写paint方法,,方法名一定要是一样的

txh3955
txh3955 谢谢
接近 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!