我正在用Java和Swing对minesweeper进行编程,并且正在研究当用户以所需的尺寸重新启动游戏时代码应该做什么。我有一个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();


虽然它第一次可以很好地绘画,但是每隔一次它只在我之前的网格之上或之下绘画,这样当我们有3x3然后是15x15时,您必须调整窗口的大小才能看到这些单元格,并且它们被绘制在先前的3x3下网格。为什么网格不消失?我的意思是-当我们创建新对象时,该对象早已不复存在,因此应使用remove()作为图形表示形式。为什么不呢

最佳答案

以此顺序呼叫。

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

09-11 04:22