How do I remove an old JPanel and add a new one?

假装没事ソ 提交于 2019-12-06 06:52:30

setVisible(false), even in the correct place, will not actually remove the panel from the container. If you want to replace the panel do this:

frame.getContentPane().remove(partnerSelectionPanel);
frame.add(new JPanel());
frame.getContentPane().invalidate();
frame.getContentPane().validate();

Note that frame.getContentPane().add(Component) is the same as frame.add(Component) - the components are actually contained within the content pane.

Don't forget or overlook the approach of using the Layout, namely the CardLayout as the Frames Layout, to allow this type of behavior (This is a good strategy for a "Wizard" for example). One advantage to this is it doesn't cause any weird flash or draw effects as that is what this Layout is meant to do--Allow a panels to be swapped out, assuming they have exclusive "real estate" or can share the same areas (i.e. "Wizard" like behavior.)

partnerSelectionPanel.setVisible(false); \\ <------------

This line is actualy out the method run.

You probably want something like this:

public void run() {
   label.setText(i + " seconds left.");
   try {
      Thread.sleep (i * 1000);
   } catch (InterruptedException e) {
      handleException (e);
   }
   partnerSelectionPanel.setVisible(false);
}
sayem siam

You can use

  Frame.setContentPane(jPanel);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!