I'm trying to move from a title screen into the main program. I was going to simply set a button to create a new JFrame
and close the previous however upon research this is said to be bad practice and the result isn't as seamless as I would hope. Any suggestions?
Asked
Active
Viewed 3,934 times
0

Melika Barzegaran
- 429
- 2
- 9
- 25

HS'
- 37
- 1
- 8
-
did you try set focus? – Roman C Mar 20 '15 at 17:34
-
See [The Use of Multiple JFrames, Good/Bad Practice?](http://stackoverflow.com/q/9554636/418556) – Andrew Thompson Mar 21 '15 at 01:53
1 Answers
4
A JFrame is a window, when you use applications they do not typically open up a new window every time you change to a new view. Instead, you should have one JFrame and set up multiple JPanels. This way you can add the correct JPanel to the JFrame when needed.
To do this:
JFrame frame = new JFrame();
frame.getContentPane().add(titlePanel); //menuPanel refers to a panel you create
Then when your button is clicked:
frame.getContentPane().removeAll();
frame.getContentPane().add(mainPanel);
frame.revalidate();

chrissukhram
- 2,957
- 1
- 13
- 13
-
Hi. Sorry for the late comment. How would I do this using an external plugin which automatically creates the JFrame : *`/** * Auto-generated main method to display this JFrame */ public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { StaffList2WithBetterSaveGUI inst = new StaffList2WithBetterSaveGUI(); inst.setLocationRelativeTo(null); inst.setVisible(true); } }); }` * – HS' Mar 21 '15 at 22:17
-
@HS' you would do ```inst.getContentPane().removeAll(); inst.getContentPane().add(mainPanel); inst.revalidate(); inst.repaint();``` – Cardinal System Jun 25 '17 at 17:25
-
@chrissukhram If I was trying to "refresh" my frame doing ```frame.add(mainPanel); //... frame.getContentPane().removeAll(); frame.add(mainPanel); frame.revalidate(); frame.repaint();``` with `mainPanel` containing multiple nested `JPanels`, would those four statements also refresh the panels? – Cardinal System Jun 25 '17 at 17:31