I'm working on a 2D game and am now stumped on a drawing issue. I'm repainting the JPanel with the background image and characters every frame, but the GUI is created in a setup function. I think that causes the JButton to appear behind the background image, and its worth mentioning this class extends JPanel. I'm using setBounds in order to arrange GUI elements a special way. What is a possible solution to this issue?
/** Draw game to the screen **/
private void gameDraw() {
    Graphics g2 = this.getGraphics();
    g2.drawImage(image, 0, 0 ,null);
    g2.dispose();
}
public void SetupUI() {
    uploadButton = new JButton("UPLOAD");
    uploadButton.setBounds(WIDTH / 2, HEIGHT - 40, 50, 30);
    uploadButton.setToolTipText("Press this button to upload your AI to the ship");
    uploadButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            //TO DO: Make upload button compile and run the users code
        }
    });
    this.add(uploadButton);
    this.setVisible(true);
}
