JPanel 类型的方法未定义

The method is undefined for the type JPanel

所以我正在尝试创建一个简单的程序来打印出一个矩形,但是我遇到了这个问题而且我不知道如何解决它。这是我的代码:

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.*;

public class GraphicsEditor extends JPanel{
    
    public void drawShape(Graphics g) {
        super.drawShape(g);
        g.setColor(Color.BLUE);
        g.drawRect(100, 100, 120, 150);
    }
    
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        
        GraphicsEditor ga = new GraphicsEditor();
        
        frame.setSize(1280, 720);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
        frame.add(ga);
    }

}

当我尝试在此处添加 super 时出现错误:

public void drawShape(Graphics g) {
            super.drawShape(g);
            g.setColor(Color.BLUE);
            g.drawRect(100, 100, 120, 150);
        }

一个JPanel没有drawShape(Graphics)方法,所以调用'super'方法没有意义。当您认为您正在重写一个方法时,请务必添加 @Override 符号,以便在该方法拼写错误、使用错误参数或完全不存在(情况就是这样)时获得编译器警告在这里)。

正确的做法是覆盖 paintComponent 方法,调用(现有的)超级方法,然后立即使用提供的 Graphics 实例调用 drawShape 方法paintComponent 方法。

这是缩小 GUI 后的结果:

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.*;

public class GraphicsEditor extends JPanel {
    
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        drawShape(g);
    }
    
    // @Override // does NOT override an existing method! 
    public void drawShape(Graphics g) {
        //super.drawShape(g);
        g.setColor(Color.BLUE);
        g.drawRect(100, 100, 120, 150);
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame();

        GraphicsEditor ga = new GraphicsEditor();

        frame.setSize(280, 200);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(ga);
    }
}