Как заменить JPanel другим во время работы программы - PullRequest
5 голосов
/ 13 ноября 2010

Код имеет JPanel с внутренней JPanel, которая отображает чертеж AWT.После щелчка мышью внутренняя JPanel должна быть заменена одним из ее полиморфных братьев и сестер.Этот код не заменяет jPanel.


class ContentPanel extends JPanel {</p>

<pre><code>  private GraphicPanel graphicPanel;

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

  public void setGraphicPanel(GraphicPanel graphicPanel) {
    this.graphicPanel = graphicPanel;

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

Установка графической панели для полиморфного родственника не вызывает никаких ошибок, она просто не рисует новую графическую панель.Использование cardLayout не является предпочтительным, должен быть более чистый способ.Как поступить?

1 Ответ

3 голосов
/ 13 ноября 2010

в setGraphicPanel, вам нужно удалить текущую graphicPanel и добавить новую.ЗАТЕМ вызовите повторную проверку.

примерно так:

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

Хотя CardLayout был разработан именно для этогоВы уверены, что не хотите использовать CardLayout?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...