Como adiciono uma imagem de plano de fundo no meu código?

Olá, eu possuo uma interface já montada, eu gostaria de saber se é possível adicionar uma imagem de plano de fundo atrás de todos os componentes, meu código é esse:
`

package Mainmenu;

import java.awt.AWTException;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.ParseException;
import java.util.ArrayList;

import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.EmptyBorder;
import com.towel.swing.img.JImagePanel;

 public class Indexmenu extends JFrame implements ActionListener{
 JButton som = new JButton();
 JButton sobre = new JButton("Sobre");
 JButton telainteira = new JButton();
 JButton configuracoes = new JButton("Settings");
 JButton sair = new JButton("X");
 JButton novojogo = new JButton("New Game");
 JButton continuar = new JButton("Load created game");
 JButton importar = new JButton("Import Assets");

 ImageIcon iconetelainteira = new ImageIcon(getClass().getResource("/Assets/fullscreenbutton.png"));
 ImageIcon img = new ImageIcon(getClass().getResource("/Assets/Logo3.png"));

 JPanel cima = new JPanel();
 JPanel botoes = new JPanel();
 JPanel jogo = new JPanel();
 JPanel logo = new JPanel();
	 
 BorderLayout layout = new BorderLayout();
 FlowLayout layoutdois = new FlowLayout();
 GridLayout layouttres = new GridLayout(5,0,10,10);

 ArrayList<Color> cores = new ArrayList<Color>();

 Font fonte = new Font("Comic Sans MS",Font.BOLD,30);
 Font fontedois = new Font("Comic Sans MS",Font.BOLD,20);

 boolean bo = false;

 JLabel lg = new JLabel(img);

 Indexmenu(){
 
 try {
		UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
	} catch (ClassNotFoundException | InstantiationException | IllegalAccessException
			| UnsupportedLookAndFeelException e) {
		e.printStackTrace();
	}
 
 Toolkit kit = Toolkit.getDefaultToolkit(); 
 Image image = kit.createImage(getClass().getResource("/Assets/Cursor3.png"));  
 Point point = new Point(0,0); // 
 String nameCursor = "Image Cursor";     
 Cursor cursor = kit.createCustomCursor(image, point, nameCursor); 
 jogo.setCursor(cursor);
 
 cores.add(new Color(255,255,0));
 cores.add(new Color(255,0,0));
 cores.add(new Color(0,255,0));
	
  mouses();
  
setTitle("I am Shinobi Game");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setExtendedState(JFrame.MAXIMIZED_BOTH);
setVisible(true);

  logo.add(lg); 

sair.setBorderPainted(false);
novojogo.setBorderPainted(false);
continuar.setBorderPainted(false);
configuracoes.setBorderPainted(false);
sobre.setBorderPainted(false);
telainteira.setContentAreaFilled(false);
telainteira.setBorderPainted(false);
importar.setBorderPainted(false);
som.setBorderPainted(false);

sair.setFocusable(false);
novojogo.setFocusable(false);
continuar.setFocusable(false);
configuracoes.setFocusable(false);
sobre.setFocusable(false);
telainteira.setFocusable(false);
importar.setFocusable(false);
som.setFocusable(false);

jogo.setLayout(layout);
jogo.add(cima,layout.NORTH);
jogo.add(logo,layout.CENTER);
jogo.add(botoes, layout.SOUTH);

novojogo.setFont(fonte);
continuar.setFont(fonte);
configuracoes.setFont(fonte);
sobre.setFont(fonte);
sair.setFont(fontedois);
importar.setFont(fontedois);

cima.setLayout(layoutdois);
cima.add(importar);
cima.add(som);
cima.add(telainteira);
cima.add(sair);
sair.setBackground(cores.get(1));
importar.setBackground(cores.get(1));

botoes.setLayout(layouttres);
botoes.add(novojogo);
novojogo.setBackground(cores.get(1));
botoes.add(continuar);
continuar.setBackground(cores.get(1));
botoes.add(configuracoes);
configuracoes.setBackground(cores.get(1));
botoes.add(sobre);
sobre.setBackground(cores.get(1));
botoes.setBorder(new EmptyBorder(0,400,0,400));

layoutdois.setAlignment(FlowLayout.RIGHT);
add(jogo);

som.setIcon(new ImageIcon(getClass().getResource("/Assets/sound-button.png")));
iconetelainteira.setImage(iconetelainteira.getImage().getScaledInstance(iconetelainteira.getIconWidth()-60,iconetelainteira.getIconHeight()-60, Image.SCALE_DEFAULT));
telainteira.setIcon(iconetelainteira);

telainteira.addActionListener(this);
sair.addActionListener(this);
 }

  public static void main(String[]args){
Indexmenu index = new Indexmenu();
  }

 public void actionPerformed(ActionEvent evento) {
if(evento.getSource()==telainteira){
	if(bo==false){
	   bo = true;
	   this.dispose();
       this.setUndecorated(true);
       this.setVisible(true);
	   this.setExtendedState(JFrame.MAXIMIZED_BOTH);
	   logo.setBorder(BorderFactory.createEmptyBorder(70,50,0,0));
	}else if(bo==true){
	   bo = false;
	   this.dispose();
       this.setUndecorated(false);
       this.setVisible(true);
	   this.setExtendedState(JFrame.MAXIMIZED_BOTH);
	   logo.setBorder(null);
	}
}
if(evento.getSource()==sair){
	 System.exit(0);
}
 }
  public void mouses(){
      novojogo.addMouseListener(new MouseListener(){
        Dimension dn = new Dimension(0,0);

		public void mouseReleased(MouseEvent arg0) {
          novojogo.setSize(dn);
		}
		
		public void mousePressed(MouseEvent arg0) {
			novojogo.setSize(novojogo.getWidth()-10,novojogo.getHeight()-10);
		}
		
		public void mouseExited(MouseEvent arg0) {
	          novojogo.setSize(dn);
		}
		
		public void mouseEntered(MouseEvent arg0) {
			dn = new Dimension(novojogo.getWidth(),novojogo.getHeight());
			novojogo.setSize(novojogo.getWidth()+5,novojogo.getHeight()+5);
		}
		
		public void mouseClicked(MouseEvent arg0) {
		}
    });
    continuar.addMouseListener(new MouseListener(){
    	 Dimension dn = new Dimension(0,0);

 		public void mouseReleased(MouseEvent arg0) {
           continuar.setSize(dn);
 		}
 		
 		public void mousePressed(MouseEvent arg0) {
 			continuar.setSize(continuar.getWidth()-10,continuar.getHeight()-10);
 		}
 		
 		public void mouseExited(MouseEvent arg0) {
 	          continuar.setSize(dn);
 		}
 		
 		public void mouseEntered(MouseEvent arg0) {
 			dn = new Dimension(continuar.getWidth(),continuar.getHeight());
 			continuar.setSize(continuar.getWidth()+5,continuar.getHeight()+5);
 		}
 		
 		public void mouseClicked(MouseEvent arg0) {
 		}
    });
    configuracoes.addMouseListener(new MouseListener(){
    	 Dimension dn = new Dimension(0,0);

 		public void mouseReleased(MouseEvent arg0) {
           configuracoes.setSize(dn);
 		}
 		
 		public void mousePressed(MouseEvent arg0) {
 			configuracoes.setSize(configuracoes.getWidth()-10,configuracoes.getHeight()-10);
 		}
 		
 		public void mouseExited(MouseEvent arg0) {
 	          configuracoes.setSize(dn);
 		}
 		
 		public void mouseEntered(MouseEvent arg0) {
 			dn = new Dimension(configuracoes.getWidth(),configuracoes.getHeight());
 			configuracoes.setSize(configuracoes.getWidth()+5,configuracoes.getHeight()+5);
 		}
 		
 		public void mouseClicked(MouseEvent arg0) {
 		}
    });
    sobre.addMouseListener(new MouseListener(){
    	 Dimension dn = new Dimension(0,0);

 		public void mouseReleased(MouseEvent arg0) {
           sobre.setSize(dn);
 		}
 		
 		public void mousePressed(MouseEvent arg0) {
 			sobre.setSize(sobre.getWidth()-10,sobre.getHeight()-10);
 		}
 		
 		public void mouseExited(MouseEvent arg0) {
 	          sobre.setSize(dn);
 		}
 		
 		public void mouseEntered(MouseEvent arg0) {
 			dn = new Dimension(sobre.getWidth(),sobre.getHeight());
 			sobre.setSize(sobre.getWidth()+5,sobre.getHeight()+5);
 		}
 		
 		public void mouseClicked(MouseEvent arg0) {
 		}
    });
    telainteira.addMouseListener(new MouseListener(){
    	 Dimension dn = new Dimension(0,0);

 		public void mouseReleased(MouseEvent arg0) {
           telainteira.setSize(dn);
 		}
 		
 		public void mousePressed(MouseEvent arg0) {
 			telainteira.setSize(telainteira.getWidth()-10,telainteira.getHeight()-10);
 		}
 		
 		public void mouseExited(MouseEvent arg0) {
 	          telainteira.setSize(dn);
 		}
 		
 		public void mouseEntered(MouseEvent arg0) {
 			dn = new Dimension(telainteira.getWidth(),telainteira.getHeight());
 			telainteira.setSize(telainteira.getWidth(),telainteira.getHeight()+5);
 		}
 		
 		public void mouseClicked(MouseEvent arg0) {
 		}
    });
    sair.addMouseListener(new MouseListener(){
    	 Dimension dn = new Dimension(0,0);

 		public void mouseReleased(MouseEvent arg0) {
           sair.setSize(dn);
 		}
 		
 		public void mousePressed(MouseEvent arg0) {
 			sair.setSize(sair.getWidth()-10,sair.getHeight()-10);
 		}
 		
 		public void mouseExited(MouseEvent arg0) {
 	          sair.setSize(dn);
 		}
 		
 		public void mouseEntered(MouseEvent arg0) {
 			dn = new Dimension(sair.getWidth(),sair.getHeight());
 			sair.setSize(sair.getWidth(),sair.getHeight()+5);
 		}
 		
 		public void mouseClicked(MouseEvent arg0) {
 		}
    });
    importar.addMouseListener(new MouseListener(){
    	 Dimension dn = new Dimension(0,0);

 		public void mouseReleased(MouseEvent arg0) {
           importar.setSize(dn);
 		}
 		
 		public void mousePressed(MouseEvent arg0) {
 			importar.setSize(importar.getWidth()-10,importar.getHeight()-10);
 		}
 		
 		public void mouseExited(MouseEvent arg0) {
 	          importar.setSize(dn);
 		}
 		
 		public void mouseEntered(MouseEvent arg0) {
 			dn = new Dimension(importar.getWidth(),importar.getHeight());
 			importar.setSize(importar.getWidth(),importar.getHeight()+5);
 		}
 		
 		public void mouseClicked(MouseEvent arg0) {
 		}
    });
    som.addMouseListener(new MouseListener(){
   	 Dimension dn = new Dimension(0,0);

		public void mouseReleased(MouseEvent arg0) {
          som.setSize(dn);
		}
		
		public void mousePressed(MouseEvent arg0) {
		   if(som.getIcon().toString().contains("/Assets/sound-buttonoff.png")){
				som.setIcon(new ImageIcon(getClass().getResource("/Assets/sound-button.png"))); 
		   }else if(som.getIcon().toString().contains("/Assets/sound-button.png")){
				som.setIcon(new ImageIcon(getClass().getResource("/Assets/sound-buttonoff.png"))); 
		   }
			som.setSize(som.getWidth()-10,som.getHeight()-10);
		}
		
		public void mouseExited(MouseEvent arg0) {
	          som.setSize(dn);
		}
		
		public void mouseEntered(MouseEvent arg0) {
			dn = new Dimension(som.getWidth(),som.getHeight());
			som.setSize(som.getWidth(),som.getHeight()+5);
		}
		
		public void mouseClicked(MouseEvent arg0) {
		}
   });
 }
}

`

1 curtida