2010-11-13 6 views
5

Le code a un JPanel avec un JPanel interne qui affiche le dessin awt. Lors d'un clic de souris, le JPanel interne doit être remplacé par l'un de ses frères et sœurs polymorphes. Ce code ne remplace pas le jPanel.Comment remplacer un JPanel par un autre pendant que le programme fonctionne


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(); }

Réglage du graphicPanel à un parent polymorphes ne cause aucune erreur, il est tout simplement pas la peinture des nouveaux graphicPanel. L'utilisation de cardLayout n'est pas préférée, il doit y avoir une manière plus propre. La façon de procéder?

+2

La manière la plus propre est d'utiliser une carte. – Starkey

+0

J'ai utilisé cardLayout. ça fonctionne très bien. Merci les gars. –

Répondre

3

Dans setGraphicPanel, vous devez supprimer le graphicPanel actuel et ajouter le nouveau. Puis appelez revalidate.

quelque chose comme ceci:

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

Bien que CardLayout a été conçu pour le faire cette chose. Êtes-vous sûr de ne pas vouloir utiliser CardLayout?