繁体   English   中英

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

[英]How to replace a JPanel with another while the program is running

该代码有一个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并添加新的。 然后调用revalidate。

这样的事情:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM