2010-11-13 12 views
5

El código tiene un JPanel con un JPanel interno que muestra AWT Drawing. Al hacer clic con el mouse, el JPanel interno será reemplazado por uno de sus hermanos polimórficos. Este código no reemplaza el jPanel.Cómo reemplazar un JPanel con otro mientras el programa se está ejecutando


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(); // revalidar(); // volver a pintar(); }

Ajuste del graphicPanel a un pariente polimórfica no causa ningún error, simplemente no es la pintura de los nuevos graphicPanel. No es preferible usar cardLayout, debe haber una manera más limpia. ¿Cómo proceder?

+2

La manera más limpia es utilizar una tarjeta de presentación. – Starkey

+0

Utilicé cardLayout. funciona genial gracias chicos. –

Respuesta

3

en setGraphicPanel, necesita eliminar el panel gráfico actual y agregar el nuevo. LUEGO llame revalidate.

algo como esto:

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

Aunque CardLayout fue diseñado para hacer precisamente esto. ¿Estás seguro de que no quieres usar CardLayout?

Cuestiones relacionadas