如何在程序运行时将JPanel替换为另一个JPanel

com*_*lla 5 java swing

该代码有一个JPanel,内部JPanel显示awt绘图.鼠标点击后,内部JPanel将被其中一个多态兄弟姐妹取代.此代码不替换jPanel.


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;
Run Code Online (Sandbox Code Playgroud)

// invalidate(); // revalidate(); // repaint(); }

将graphicPanel设置为多态相对不会导致任何错误,它只是不绘制新的graphicPanel.使用cardLayout不是首选,必须有一个更清洁的方式.如何进行?

Ste*_*eod 3

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

像这样的东西:

public void setGraphicPanel(GraphicPanel graphicPanel) {
    this.removeAll();
    this.graphicPanel = graphicPanel;
    this.add(graphicPanel);
    this.revalidate();   
}
Run Code Online (Sandbox Code Playgroud)

虽然 CardLayout 就是为了做这件事而设计的。您确定不想使用 CardLayout 吗?