Consider using CardLayout. This way you can switch via multiple UIs without needing another frame. Here's how to use it.
Edit: As Guillaume posted in his comment, this answer from Andrew also covers how to use the layout.
Edit2:
As you requested a little more information about my latest post, here's how such a class may look like:
import javax.swing.JFrame;
public abstract class MyFrameManager {
    static private JFrame   startFrame,
                        anotherFrame,
                        justAnotherFrame;
static public synchronized JFrame getStartFrame()
{
    if(startFrame == null)
    {
        //frame isnt initialized, lets do it
        startFrame = new JFrame();
        startFrame.setSize(42, 42);
        //...
    }
    return startFrame;
}
static public synchronized JFrame getAnotherFrame()
{
    if(anotherFrame == null)
    {
        //same as above, init it
    }
    return anotherFrame;
}
static public synchronized JFrame getJustAnotherFrame()
{
    //same again
    return justAnotherFrame;
}
public static void main(String[] args) {
    //let's test!
    JFrame start = MyFrameManager.getStartFrame();
        start.setVisible(true);
    //want another window
    JFrame another = MyFrameManager.getAnotherFrame();
        another.setVisible(true);
    //oh, doenst want start anymore
    start.setVisible(false);
}
}
This way you would only instantiate every JFrame once, but you could always access them via your manager class. What you do with them after that is your decision.
I also just made it thread-safe, which is crucial for singletons.