The solution is simple: use a CardLayout and let this layout manager do all the heavy lifting for you. For more details on how to do this, please see the tutorial: How to use CardLayout
As for your code, please note that you are actually creating 2 JFrames when it starts and two more if the JButton is pushed:
The GuiFrame class itself extends JFrame, but it appears to be a JFrame that you never use and thus is wasted, but it is created nonetheless on program start up and whenever GuiFrame instance is created, such as when the button is pressed. Then inside of this class you create another JFrame f, one on program start up and once again on button press, and I don't think that this is what you want to do.
So change your code so that the class does not extend JFrame, and don't create a new instance of the class in your buttons' ActionListener. Instead use a CardLayout to swap views.
For example:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class GuiFrame {
private static final String FIRST_PANEL = "First Panel";
private static final String SECOND_PANEL = "Second Panel";
final JFrame f = new JFrame("Test");
private CardLayout cardLayout = new CardLayout();
private JPanel content;
public void Starter() {
f.setSize(400, 100);
f.setLocationRelativeTo(null);
JButton OptionOk = new JButton("OK");
Label option = new Label("Choose a Option");
content = (JPanel) f.getContentPane();
content.setLayout(cardLayout);
JPanel firstPanel = new JPanel();
firstPanel.setBackground(Color.white);
firstPanel.setLayout(new FlowLayout());
firstPanel.add(option);
firstPanel.add(OptionOk);
content.add(firstPanel, FIRST_PANEL);
content.add(createSecondPanel(), SECOND_PANEL);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
OptionOk.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cardLayout.show(content, SECOND_PANEL);
}
});
}
private JPanel createSecondPanel() {
JPanel secondPanel = new JPanel();
secondPanel.add(new JButton(new AbstractAction("Go Back") {
public void actionPerformed(ActionEvent e) {
cardLayout.show(content, FIRST_PANEL);
}
}));
return secondPanel;
}
public static void main(String[] args) {
GuiFrame gf = new GuiFrame();
gf.Starter();
}
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…