如何通过覆盖 paintComponent 为 JFrame 设置背景?

How to set a background to JFrame by over-riding paintComponent?

我刚开始 Java GUI,我想通过覆盖 paintComponent(Graphics g) 方法为 JFrame 设置背景图像,以便我能够在图像上添加子组件。我看过其他答案,但代码对初学者来说太复杂了

请使用以下代码解释这是如何完成的:

public class staffGUI extends JFrame {

public staffGUI(){
    super("Staff Management");

    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setLocationRelativeTo(null);
    this.setResizable(false);
    this.pack();
}       
}
public class staffGUI extends JFrame {

    public staffGUI(){
        super("Staff Management");

        this.setContentPane(new MyContentPane("C://somePath//image.jpg"));

        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLocationRelativeTo(null);
        this.setResizable(false);
        this.pack();
    }

    private class MyContentPane extends JPanel
    {
         private BufferedImage image;

         public MyContentPane(String path){
               try{
                     image = ImageIO.read(new File(path));
               }catch(IOException e){
                     e.printStackTrace();

                     image = new BufferedImage(100 , 100 , BufferedImage.TYPE_INT_ARGB);
                     Graphics g = image.getGraphics();
                     g.setColor(Color.blue);
                     g.fillRect(0 , 0 , 100 , 100);
                     g.dispose();
         }

         public void paintComponent(Graphics g){
              super.paintComponent(g);

              g.drawImage(image , 0 , 0 , getWidth() , getHeight() , null);
         }
    }
}       
框架中的

Painting 始终在框架的内容窗格中完成。内容窗格也是添加组件的地方。 MyContentPane 从给定路径加载 BufferedImage。如果加载失败,则会创建一个蓝色矩形作为图像。通过将示例代码中的内容窗格设置为 MyContentPane 的实例,您可以 MyContentPane 渲染框架的完整内部区域。