Java 如何在程序运行时用另一个JPanel替换JPanel

Java 如何在程序运行时用另一个JPanel替换JPanel,java,swing,Java,Swing,代码有一个JPanel,其中包含一个显示awt图形的内部JPanel。鼠标单击后,内部JPanel将被其多态兄弟之一替换。此代码不会取代jPanel //使无效(); //重新验证(); //重新油漆(); } 将graphicPanel设置为多态相对不会导致任何错误,只是不会绘制新的graphicPanel。使用cardLayout不是首选,必须有更干净的方法。如何继续?在setGraphicPanel中,您需要删除当前的graphicPanel并添加新的graphicPanel。然后致电

代码有一个JPanel,其中包含一个显示awt图形的内部JPanel。鼠标单击后,内部JPanel将被其多态兄弟之一替换。此代码不会取代jPanel

//使无效(); //重新验证(); //重新油漆(); }


将graphicPanel设置为多态相对不会导致任何错误,只是不会绘制新的graphicPanel。使用cardLayout不是首选,必须有更干净的方法。如何继续?

在setGraphicPanel中,您需要删除当前的graphicPanel并添加新的graphicPanel。然后致电重新验证

大概是这样的:


尽管CardLayout的设计初衷就是为了实现这一点。你确定不想使用CardLayout吗?

更简洁的方法是使用CardLayout。我使用了CardLayout。它工作得很好。谢谢各位。

class ContentPanel extends JPanel {

  private GraphicPanel graphicPanel;

  public ContentPanel(GraphicPanel graphicPanel) {
    this.graphicPanel = graphicPanel;
    add(this.graphicPanel);

  public void setGraphicPanel(GraphicPanel graphicPanel) {
    this.graphicPanel = graphicPanel;
public void setGraphicPanel(GraphicPanel graphicPanel) {
    this.removeAll();
    this.graphicPanel = graphicPanel;
    this.add(graphicPanel);
    this.revalidate();   
}