I am using Java's Swing
here to make a UI application. I have a created a JFrame, with some buttons. When I click on this button, I want a new JFrame with some different content at this place. However, I do not want a new JFrame to load here.
One approach, I know is of setting the visbility of the second JFrame to be True in the actionPerformed(ActionEvent obj)
method of the button in the first JFrame. But it again loads a new JFrame and I don't want that.
public class FirstUI extends JFrame {
JButton but1;
public FirstUI(){
but1= new JButton("Click here");
add(but1);
XYZ obj= new XYZ():
but1.addActionListener(obj);
}
public class XYZ implements ActionListener{
public void actionPerformed(ActionEvent obj1){
// WHAT TO DO HERE
}
}
}
I only want a single JFrame whose content changes as we click on different buttons. How can I achieve that ?
One approach is to change the JFrame's Content Pane. which is basically a JPanel. You can do that by
frame.setContentPane( <your new panel> );
The Second approach is to do what @Peter Lang did. and that is to use a Layout Manager which could change different content groups.
You can also dynamically manipulate the contents of your
JFrame
at runtime. You can useadd(...)
,remove(...)
,removeAll(...)
methods to add and remove the contents as you do before showing the frame. After you're done you need to callrevalidate()
andrepaint()
methods of the modified container to make everything settle down and displayed properly.However I think the right solution depends on the actual concept you are trying to implement. If you want to add or remove a couple of GUI elements to emphasize a functionality, then the correct way is to manipulate the container as I outlined. But if you want slightly different GUI depending on system state (not more then 2-3) then
CardLayout
would be a better suited choiceYou can set visibility of parent class false.
Then you get only one Frame at a time with your required content.
You have to create static object of the frame and setVisible(fase) at the click event of the Button.
Ex.
}
It will help you.
you got my point?
Have a look at
CardLayout
, this would allow to switch the content of your frame:See How to Use CardLayout for an example.