该代码具有一个带有内部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;

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

将graphicPanel设置为多态相对不会导致任何错误,只是不会绘制新的graphicPanel。不推荐使用cardLayout,必须有一种更简洁的方法。如何进行?

最佳答案

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

像这样的东西:

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

尽管CardLayout旨在执行此操作。您确定不想使用CardLayout吗?

09-13 05:08