【问题标题】:How to replace a JPanel with another while the program is running程序运行时如何用另一个 JPanel 替换
【发布时间】:2010-11-13 20:24:29
【问题描述】:

代码有一个 JPanel 和一个显示 awt 绘图的内部 JPanel。鼠标单击后,内部 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 不是首选,必须有更清洁的方式。如何进行?

【问题讨论】:

  • 更简洁的方法是使用卡片布局。
  • 我使用了cardLayout。效果很好。谢谢大家。

标签: java swing


【解决方案1】:

在setGraphicPanel中,你需要移除当前的graphicPanel并添加新的。然后调用 revalidate。

类似这样的:

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

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

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    • 2020-01-16
    • 1970-01-01
    相关资源
    最近更新 更多