JPanel 在使用 remove() 后不会消失



我正在用Java和Swing编程扫雷,我正在研究当用户重新启动具有所需尺寸的游戏时代码应该做什么。我有一个类MyGrid,它有一个(int, int)构造函数,是JPanel的扩展。它绘制网格并处理网格所发生的事情(点击,炸弹放置等)。所以在game类中,我有一个ActionLister,当用户想要开始一个新游戏时,我验证用户的输入,然后我想在我的JFrame上绘制一个新的网格(这里称为myPane)。所以我这样做:

        myPane.remove(mswGrid);
        MyGrid mswGrid = new MyGrid(nowaSzerokosc, nowaWysokosc);
        myPane.getContentPane().add(mswGrid, BorderLayout.CENTER);
        myPane.repaint();
        myPane.validate();

虽然它第一次画得很好,但每次它都会在我之前的网格上或下面画所以当我们有3x3和15x15时,你必须调整窗口的大小才能看到这些单元格它们被画在之前的3x3网格下。为什么网格没有消失?我的意思是-对象已经消失了,因为我们创建新的,所以应该是图形表示感谢remove()。为什么不呢?

按此顺序调用

    myPane.revalidate();
    myPane.repaint();

最新更新