How to move from one Frame to another Game Frame

I would like to move from the Start screen of my Snake game to the actual Snake game itself, I have tried making a new Frame, setting that to visible and then using dispose() to get rid of the old Frame as I've seen people suggest in other StackOverflow answers but that simply gives me a blank window instead of leading back to the Frame class, where my Snake game is. I would just like to know how to link the two so that when the Start or Back button is clicked, it goes to that class. Here are the two classes:

Frame Class:

    package snake;

    import java.awt.BorderLayout;
    import java.awt.GridLayout;
    import javax.swing.JFrame;
    import javax.swing.JLabel;


    public class Frame extends JFrame {

private static final long serialVersionUID = 1L;

// constructor 
public Frame() {

    // frame for the snake
    JFrame snake=new JFrame();
    snake.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    snake.setTitle("Snake");
    snake.setResizable(false);

    // call the initialization method
    init();
}

// initialization method 
public void init() {

    // set layout for the snake 
    setLayout(new GridLayout(1, 1, 0, 0));
    // make a new screen
    Screen scr=new Screen();
    add(scr);

    // pack(): whatever is in the window, it makes it that size
    pack();

    // setLocationRelativeTo(): puts the frame in the middle of the screen
    setLocationRelativeTo(null);
    setVisible(true);

}

public static void main (String[] args) {
    // create a new frame
    new Frame();

 }


}

Start Class:

    package snake;

    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Frame;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.SwingConstants;


    public class Start {

     public static void main(String[] args) {
    // making a new startscreen
    StartScreen startFrame = new StartScreen();
}

}

 class StartScreen extends JFrame {

// constructor
public StartScreen() {

    // fonts
    Font snakeTitleFont = new Font("Arial", Font.BOLD, 50);
    Font buttonFont = new Font("Arial", Font.CENTER_BASELINE, 20);

    // text
    JLabel snakeTitle = new JLabel("Snake", SwingConstants.CENTER);
    snakeTitle.setFont(snakeTitleFont);
    add(snakeTitle, BorderLayout.NORTH);

    // start button
    JButton startButton = new JButton("Start");

    // button settings
    startButton.setBackground(Color.MAGENTA);
    startButton.setOpaque(true);
    startButton.setBorderPainted(false);
    startButton.setFont(buttonFont);

    // action listener for start btn
    startButton.addActionListener(new ActionListener() {

        // once this is clicked on, it should call the GUI
        @Override
        public void actionPerformed(ActionEvent e) {
            Frame frame=new Frame();

            // settings for the new frame
            frame.setVisible(true); 
            frame.setSize(800, 500);
            frame.setResizable(false);
            frame.setLocationRelativeTo(null);

            new Frame();

            // closes the old form after start is clicked
            dispose();

        }
    });

    // back button
    JButton backButton = new JButton("Back");

    // button settings
    backButton.setLayout(null);
    backButton.setBackground(Color.YELLOW);
    backButton.setOpaque(true);
    backButton.setBorderPainted(false);
    backButton.setFont(buttonFont);

    // make a new JPanel
    JPanel panel = new JPanel();
    panel.add(startButton);
    panel.add(backButton);
    add(panel, BorderLayout.CENTER);

    // action listener for start btn
    backButton.addActionListener(new ActionListener() {

        // once this is clicked on, it should call the GUI
        @Override
        public void actionPerformed(ActionEvent e) {

            // direct to the main class
            Frame frame=new Frame();

            // settings for the new frame
            frame.setVisible(true); 
            frame.setSize(800, 500);
            frame.setResizable(false);
            frame.setLocationRelativeTo(null);


            // closes the old form after start is clicked
            dispose();

        }
    });

    // frame settings  
    this.setVisible(true);
    this.setSize(800, 500);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setResizable(false);
    this.setLocationRelativeTo(null);

}
  }