代码有一个JPanel,内部JPanel显示awt绘图。鼠标点击后,内部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不是首选,必须有一个更清洁的方式。怎么办?
答案 0 :(得分:3)
,您需要删除当前的graphicPanel并添加新的。然后调用revalidate。
类似的东西:
public void setGraphicPanel(GraphicPanel graphicPanel) {
this.removeAll();
this.graphicPanel = graphicPanel;
this.add(graphicPanel);
this.revalidate();
}
虽然CardLayout只是为了这件事而设计的。你确定你不想使用CardLayout吗?