Friday, 16 September 2016

java - Switching JPanels



So I'm trying to make a basic program to learn more about java, and I'm having trouble switching screens. I wanted to have a display class that I could call in other classes to handle all the panels and such, and then make a class to build each panel. What I'm trying to do at the moment is use a button in my startmenu class to change from one panel to another using a method in the display class.



Here's the code in the startmenu class:



public void actionPerformed(ActionEvent e)
{
display.switchPanel("Start");


}


And here is my display class:




public class Display
{

JFrame frame;


StartMenu start = new StartMenu();
MainMenu main = new MainMenu();


JPanel panel = new JPanel();

JPanel startPanel = start.createPanel();
JPanel mainPanel = main.createPanel();



CardLayout card = new CardLayout();
BorderLayout border = new BorderLayout();

public void createDisplay()
{
frame = new JFrame("Insert Name");
frame.setPreferredSize(new Dimension(800,600));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(panel, BorderLayout.CENTER);


panel.setLayout(border);
panel.add(startPanel);
panel.add(mainPanel);

mainPanel.setVisible(false);
startPanel.setVisible(true);

frame.add(panel);
frame.pack();

frame.setVisible(true);
frame.setResizable(false);
}

public void switchPanel(String x)
{
String p = x;

if(p.equals("Start"))
{

mainPanel.setVisible(true);
startPanel.setVisible(false);
}

}
}

Answer



Use a CardLayout, it's what it's designed for, for example...




public class Display {

public static final String START_VIEW = "start";
public static final String MAIN_VIEW = "main";

JFrame frame;

StartMenu start = new StartMenu();
MainMenu main = new MainMenu();


JPanel panel = new JPanel();

JPanel startPanel = start.createPanel();
JPanel mainPanel = main.createPanel();

CardLayout card = new CardLayout();

public void createDisplay() {
frame = new JFrame("Insert Name");
frame.setPreferredSize(new Dimension(800, 600));

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(panel, BorderLayout.CENTER);

panel.setLayout(card);
panel.add(startPanel, START_VIEW);
panel.add(mainPanel, MAIN_VIEW);

mainPanel.setVisible(false);
startPanel.setVisible(true);


frame.add(panel);
frame.pack();
frame.setVisible(true);
frame.setResizable(false);
}

public void switchPanel(String x) {
card.show(panel, x);
}
}



Then you might use something like...



public void actionPerformed(ActionEvent e)
{
display.switchPanel(Display.START_VIEW);
}



to switch between the views



See How to Use CardLayout for more details


No comments:

Post a Comment

c++ - Does curly brackets matter for empty constructor?

Those brackets declare an empty, inline constructor. In that case, with them, the constructor does exist, it merely does nothing more than t...