Reputation: 56229
I have one main JPanel
container and three JPanels inside. How to empty this panel and add new panels? I tried with remove(Component)
but it doesn't work. Can anybody give me advice?
Upvotes: 2
Views: 9597
Reputation: 145
I too had the same problem. All I did to resolve the issue was
panelName.setVisible(false);
mainPanel.remove(panelName);
In my case, panelName is a JPanel which lies inside mainPanel.
Upvotes: 0
Reputation: 109823
@ Harry Joy
if you added or removed (already visible container) then you have to call
revalidate();
repaint(); // not required in all cases
@ Damir if JComponents isn't public (or private) static then you can just call
myContainer.removeAll();
myContainer.revalidate();
nyCOntainer.repaint();
possible is remove JComponent
(s) by some parameter(s) with Component[] a = myContainer.getComponents();
then you could call if (components[i] instanceof JComboBox) {
...
Upvotes: 2
Reputation: 52478
This will do it. The trick is to call revalidate.
mainPanel = ...
mainPanel.removeAll();
mainPanel.add(newPanel1);
mainPanel.add(newPanel2);
mainPanel.add(newPanel3);
mainPanel.revalidate();
But really, consider using CardLayout, if you want to change what appears in a JPanel.
Upvotes: 3
Reputation: 12423
Here in this link i found a simple tutorial on how to add and remove elements from panels. The other panels inside your main panel, are also elements, so the same principle applies to them.
A good practices when adding something new in the panel is not just to use the method add(): we might also want to use revalidate() and repaint() They should be called when some event occurs(button clicked or similar...)
Also i want to mention that in the tutorial remove() i being used to remove elements, you are doing it corretly. Maybe calling again revalidate() and repaint() for the other panels make the removed panel dissapear from the GUI(The object is deleted just the GUI is not refreshed)
Note: I suppose that the elements of your inner panels are visible = true. If some of the inner elements struggle to render try to call also revalidate() and repaint() at them. I think this way should work.
Upvotes: 2