2010-11-13 92 views
5

代碼中有一個帶有內部JPanel的JPanel,用於顯示awt繪圖。在鼠標點擊時,內部JPanel將被其多態同胞中的一個替換。這段代碼並沒有取代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不是首選,必須有更清晰的方式。如何進行?

+2

更簡潔的方法是使用卡片佈局。 – Starkey 2010-11-13 20:26:28

+0

我使用了cardLayout。它的效果很好。多謝你們。 – 2010-11-13 23:19:28

回答

3

在setGraphicPanel中,您需要刪除當前的graphicPanel並添加新的。那麼調用重新驗證。

是這樣的:

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

雖然CardLayout的目的是要做到這這件事情。你確定你不想使用CardLayout嗎?

相關問題