Obraz w tle ukrywa wszystkie elementy projektu GUI

Pracuję nad aplikacją GUI, w której użyłem komponentów swing do projektowania GUI. Chcę ustawić obraz tła dla mojego formularza, ale po ustawieniu obrazu nakłada się on na wszystkie komponenty używane do projektowania GUI.

Najpierw mój formularz bez obrazu tła jest pokazany poniżej,

Mój kod do tego jest

Login.java
public class Login extends JFrame{
    public static JFrame myFrame;
    public LoginPanel loginPanel;

    public Login() throws IOException
    {
        initilize();
    }

    public void initilize()throws IOException {

        myFrame = new JFrame("Message"){ 
            private Image backgroundImage = ImageIO.read(new File("D:/Sky.jpg"));
            public void paint( Graphics g ) { 
                super.paint(g);
                g.drawImage(backgroundImage, 0, 0, null);
            }
        };
        myFrame.setLayout(new BorderLayout());

        loginPanel = new LoginPanel();

        //Panel
        Container c = myFrame.getContentPane();

        c.add(loginPanel, BorderLayout.WEST);
        myFrame.setSize(300, 150);
        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myFrame.setVisible(true);
        myFrame.setLocationRelativeTo(null);

    } 

    public static void main(String[] arg) {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                try {
                    new Login();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
    }
}
LoginPanel.java
public class LoginPanel extends JPanel implements ActionListener {
    public JLabel user_no=null;
    public JLabel password=null;
    public JButton btn_login = null;
    public JButton btn_newUser = null;
    public JTextField usernameField=null;
    public JPasswordField passwordField=null;
    public static String userNo;
    public ArrayList msgList = new ArrayList();

    public LoginPanel()
    {
        initilize();
        initConnection();
    }

    private void initilize() {

        Dimension size = getPreferredSize();
        size.width = 285;
        size.height = 150;
        setPreferredSize(size);

        setBorder(BorderFactory.createTitledBorder(null, "Login Details", TitledBorder.CENTER, TitledBorder.TOP));

        user_no = new JLabel("User No : ");

        password = new JLabel("Password : ");

        usernameField = new JTextField(14);

        passwordField = new JPasswordField(14);

        btn_login = new JButton("Login");

        btn_newUser = new JButton("New User");

        setLayout(new GridBagLayout());

        GridBagConstraints gc = new GridBagConstraints();

        //// First column /////////////////////////

        gc.anchor = GridBagConstraints.LINE_START;

        gc.gridx = 0;
        gc.gridy = 0;
        add(user_no, gc);

        gc.gridx = 0;
        gc.gridy = 1;
        add(password, gc);

        //// Second column
        gc.anchor = GridBagConstraints.LINE_START;

        gc.gridx = 1;
        gc.gridy = 0;
        add(usernameField, gc);

        gc.gridx = 1;
        gc.gridy = 1;
        add(passwordField, gc);

        // Final row
        gc.anchor = GridBagConstraints.FIRST_LINE_START;
        gc.gridx = 1;
        gc.gridy = 2;
        add(btn_login, gc);

        gc.anchor = GridBagConstraints.FIRST_LINE_END;
        gc.gridx = 1;
        gc.gridy = 2;
        add(btn_newUser, gc);

    }

    private void initConnection() {
        btn_login.addActionListener(this);
        btn_newUser.addActionListener(this);
    }

    @Override
    public void actionPerformed(ActionEvent e) {

        if(e.getSource().equals(btn_login))
        {
            userNo = usernameField.getText();
            String userPwd = passwordField.getText();
            System.out.println(userNo+" "+userPwd);
            Connection con = ConnectionImpl.getConnection();

            try
            {
                PreparedStatement pstmt;

                String sql = "SELECT sender_no,pwd FROM tb_login where sender_no ='"+userNo+"'"; 

                pstmt= con.prepareStatement(sql);

                ResultSet rs = pstmt.executeQuery();

                if(rs.next())
                {
                    if(userNo.equalsIgnoreCase(rs.getString(1))&&userPwd.equalsIgnoreCase(rs.getString(2)))
                    {
                        System.out.println("Successfull login");

                        String sql2 = "Select msg from tb_msg where sender_no='"+userNo+"'";

                        pstmt= con.prepareStatement(sql2);

                        ResultSet rs2 = pstmt.executeQuery();

                        while(rs2.next())
                        {
                            msgList.add(rs2.getString(1));
                        }
                        System.out.println("msgList = "+msgList.size());

                        Login.myFrame.dispose();
                        new AddMessage(userNo,msgList);
                    }
                }
            }
            catch (Exception exp) {
                exp.printStackTrace();
            }
        }

        if(e.getSource().equals(btn_newUser))
        {
            Login.myFrame.dispose();
            new NewUser();
        }
    }

}

Po ustawieniu obrazu tła wygląda to tak:

Ukrywa komponent dlaJButton, JLabel.

questionAnswers(2)

yourAnswerToTheQuestion