2010-11-13 94 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吗?

相关问题