使用remove()后JPanel不会消失

Str*_*tfw 2 java swing

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

        myPane.remove(mswGrid);
        MyGrid mswGrid = new MyGrid(nowaSzerokosc, nowaWysokosc);
        myPane.getContentPane().add(mswGrid, BorderLayout.CENTER);
        myPane.repaint();
        myPane.validate();
Run Code Online (Sandbox Code Playgroud)

虽然它第一次喷涂时很好,但是每隔一段时间它就会涂在我之前的网格上或之下,这样当我们有3x3然后是15x15时,你必须调整窗口的大小才能看到那些单元格并且它们是在之前的3x3下绘制的网格.为什么网格不会消失?我的意思是 - 当我们创建新对象时,对象早已消失,因此应该是remove()的图形表示.为什么不呢?

Sta*_*avL 5

按此顺序拨打电话.

    myPane.revalidate();
    myPane.repaint();
Run Code Online (Sandbox Code Playgroud)

  • @Straightfw不,这是正确的建议,问题必须在你身边的某个地方,正确的概念是通过使用带有pack()的CardLayout进行容器,然后你只需切换两个视图 (2认同)